How to resolve the algorithm GUI enabling/disabling of controls step by step in the Scala programming language
How to resolve the algorithm GUI enabling/disabling of controls step by step in the Scala programming language
Table of Contents
Problem Statement
In addition to fundamental GUI component interaction, an application should dynamically enable and disable GUI components, to give some guidance to the user, and prohibit (inter)actions which are inappropriate in the current state of the application.
Similar to the task GUI component interaction, write a program that presents a form with three components to the user:
The field is initialized to zero. The user may manually enter a new value into the field, increment its value with the "increment" button, or decrement the value with the "decrement" button. The input field should be enabled only when its value is zero. The "increment" button only as long as the field's value is less then 10: When the value 10 is reached, the button should go into a disabled state. Analogously, the "decrement" button should be enabled only as long as the value is greater than zero. Effectively, the user can now either increment up to 10, or down to zero. Manually entering values outside that range is still legal, but the buttons should reflect that and enable/disable accordingly.
Let's start with the solution:
Step by Step solution about How to resolve the algorithm GUI enabling/disabling of controls step by step in the Scala programming language
Source code in the scala programming language
import swing.{ BoxPanel, Button, GridPanel, Orientation, Swing, TextField }
import swing.event.{ ButtonClicked, Key, KeyPressed, KeyTyped }
object Enabling extends swing.SimpleSwingApplication {
def top = new swing.MainFrame {
title = "Rosetta Code >>> Task: GUI enabling/disabling of controls | Language: Scala"
val numberField = new TextField {
text = "0" // start at 0
horizontalAlignment = swing.Alignment.Right
}
val (incButton, decButton) = (new Button("Increment"), // Two variables initialized
new Button("Decrement") { enabled = false })
// arrange buttons in a grid with 1 row, 2 columns
val buttonPanel = new GridPanel(1, 2) { contents ++= List(incButton, decButton) }
// arrange text field and button panel in a grid with 2 row, 1 column
contents = new BoxPanel(Orientation.Vertical) { contents ++= List(numberField, buttonPanel) }
val specialKeys = List(Key.BackSpace, Key.Delete)
// listen for keys pressed in numberField and button clicks
listenTo(numberField.keys, incButton, decButton)
reactions += {
case kt: KeyTyped =>
if (kt.char.isDigit) // if the entered char is a digit ...
Swing.onEDT(switching) // ensure GUI-updating
else kt.consume // ... eat the event (i.e. stop it from being processed)
case KeyPressed(_, kp, _, _) if (!specialKeys.contains(kp)) =>
Swing.onEDT(switching) // ensure GUI-updating
case ButtonClicked(`incButton`) =>
numberField.text = (numberField.text.toLong + 1).toString
switching
case ButtonClicked(`decButton`) =>
numberField.text = (numberField.text.toLong - 1).toString
switching
}
def switching = {
val n = (if (numberField.text.isEmpty()) "0" else numberField.text).toLong
numberField.text = n.toString
numberField.enabled = n == 0
incButton.enabled = n < 10
decButton.enabled = n > 0
}
centerOnScreen()
} // def top(
}
You may also check:How to resolve the algorithm Set puzzle step by step in the Rust programming language
You may also check:How to resolve the algorithm Compile-time calculation step by step in the C# programming language
You may also check:How to resolve the algorithm Nth root step by step in the Elixir programming language
You may also check:How to resolve the algorithm Simple windowed application step by step in the BASIC programming language
You may also check:How to resolve the algorithm String length step by step in the Simula programming language