import scala.swing.*
import scala.swing.event.*
@main
def calculator(): Unit = {
var display = ""
new MainFrame() {
title = "Calculator"
val label = new Label()
label.preferredSize = new Dimension(200, 30)
label.xAlignment = Alignment.Left
label.font = Font("Arial", Font.Plain, 18)
val buttonGrid = new GridPanel(4, 4)
val labels = List(
"7", "8", "9", "/",
"4", "5", "6", "*",
"1", "2", "3", "+",
"C", "0", "=", "-")
val buttons = labels.foreach(l => {
val b = new Button(l)
b.reactions.+= {
case ButtonClicked(e) => click(e)
}
buttonGrid.contents += b
}
)
contents = new BorderPanel {
add(label, BorderPanel.Position.North)
add(buttonGrid, BorderPanel.Position.Center)
}
var num1 = 0
var operator = ""
def click(but: AbstractButton): Unit = {
println(but.text)
but.text match {
case "7" | "8" | "9" | "4" | "5" | "6" | "1" | "2" | "3" | "0" =>
println("number")
label.text += but.text
case "*" | "/" | "+" | "-" =>
println("operator")
operator = but.text
num1 = label.text.toInt
label.text = ""
case "=" => calculate()
case _ => println("error")
}
}
def calculate(): Unit = {
val num2 = label.text.toInt
val result = operator match {
case "+" => num1 + num2
case "-" => num1 - num2
case "*" => num1 * num2
case "/" => num1 / num2
}
label.text = result.toString
}
size = new Dimension(300, 300)
centerOnScreen()
open()
}
}