Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package week5
- import swing._
- import javax.swing._
- import scala.swing.event._
- object SuperCalculator extends SimpleSwingApplication {
- val numberField = new TextField() { columns = 10 }
- val numbers = new GridPanel(4, 3) {
- contents ++= (1 to 9).map(x => new Button(x.toString))
- contents ++= Array(new Button("0"), new Button("C"))
- }
- val operations = new GridPanel(5,1) {
- contents ++= Array("/", "*", "-", "+", "=").map(x => new Button(x))
- }
- def top = new MainFrame {
- title = "Neliölaskin"
- contents = new BorderPanel {
- layout(numberField) = BorderPanel.Position.North
- layout(numbers) = BorderPanel.Position.West
- layout(operations) = BorderPanel.Position.East
- }
- }
- var currentOperation : (Double, Double) => Double = null
- var currentNumber : Double = 0
- numbers.contents.foreach(listenTo(_))
- operations.contents.foreach(listenTo(_))
- reactions += {
- case ButtonClicked(x) => x.text match {
- case "+" => setCurrentOperation((x, y) => x+y)
- case "-" => setCurrentOperation((x, y) => x-y)
- case "*" => setCurrentOperation((x, y) => x*y)
- case "/" => setCurrentOperation((x, y) => x/y)
- case "C" => {
- numberField.text = ""
- currentOperation = null
- currentNumber = 0
- }
- case "=" => calculate(currentOperation)
- case _ => numberField.text += x.text.toInt
- }
- }
- def setCurrentOperation(function : (Double, Double) => Double) = {
- currentOperation = function
- currentNumber = numberField.text.replace(',', '.').toDouble
- numberField.text = ""
- }
- def calculate(operation : (Double, Double) => Double) {
- numberField.text = (operation(currentNumber, numberField.text.replace(',', '.').toDouble)).toString
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement