Advertisement
Guest User

Untitled

a guest
Apr 15th, 2014
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.78 KB | None | 0 0
  1. package week5
  2.  
  3. import swing._
  4. import javax.swing._
  5. import scala.swing.event._
  6.  
  7. object SuperCalculator extends SimpleSwingApplication {
  8.   val numberField = new TextField() { columns = 10 }
  9.   val numbers = new GridPanel(4, 3) {
  10.     contents ++= (1 to 9).map(x => new Button(x.toString))
  11.     contents ++= Array(new Button("0"), new Button("C"))
  12.   }
  13.  
  14.   val operations = new GridPanel(5,1) {
  15.     contents ++= Array("/", "*", "-", "+", "=").map(x => new Button(x))
  16.   }
  17.  
  18.   def top = new MainFrame {
  19.     title = "Neliölaskin"
  20.     contents = new BorderPanel {
  21.       layout(numberField) = BorderPanel.Position.North
  22.       layout(numbers) = BorderPanel.Position.West
  23.       layout(operations) = BorderPanel.Position.East
  24.     }
  25.   }
  26.  
  27.   var currentOperation : (Double, Double) => Double = null
  28.   var currentNumber : Double = 0
  29.  
  30.   numbers.contents.foreach(listenTo(_))
  31.   operations.contents.foreach(listenTo(_))
  32.   reactions += {
  33.     case ButtonClicked(x) => x.text match {
  34.       case "+" => setCurrentOperation((x, y) => x+y)
  35.       case "-" => setCurrentOperation((x, y) => x-y)
  36.       case "*" => setCurrentOperation((x, y) => x*y)
  37.       case "/" => setCurrentOperation((x, y) => x/y)
  38.       case "C" => {
  39.         numberField.text = ""
  40.         currentOperation = null
  41.         currentNumber = 0
  42.       }
  43.       case "=" => calculate(currentOperation)
  44.       case _   => numberField.text += x.text.toInt
  45.     }
  46.   }
  47.  
  48.   def setCurrentOperation(function : (Double, Double) => Double) = {
  49.     currentOperation = function
  50.     currentNumber = numberField.text.replace(',', '.').toDouble
  51.     numberField.text = ""
  52.   }
  53.  
  54.   def calculate(operation : (Double, Double) => Double) {
  55.     numberField.text = (operation(currentNumber, numberField.text.replace(',', '.').toDouble)).toString
  56.   }
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement