GUI enabling/disabling of controls: Difference between revisions

Content added Content deleted
m (→‎{{header|Java}}: Corrected comment.)
(Added Kotlin)
Line 1,279: Line 1,279:


</lang>
</lang>

=={{header|Kotlin}}==
{{libheader|JavaFX}}
{{trans|Java}}
<lang scala>// version 1.2.21

import javafx.application.Application
import javafx.beans.property.SimpleLongProperty
import javafx.scene.Scene
import javafx.scene.control.Button
import javafx.scene.control.TextField
import javafx.scene.layout.HBox
import javafx.scene.layout.VBox
import javafx.stage.Stage
import javafx.util.converter.NumberStringConverter
import javafx.event.ActionEvent

val digits = Regex("[0-9]*")

class InteractFX : Application() {

override fun start(stage: Stage) {
val input = object : TextField("0") {
// only accept numbers as input
override fun replaceText(start: Int, end: Int, text: String) {
if (text.matches(digits)) super.replaceText(start, end, text)
}

// only accept numbers on copy + paste
override fun replaceSelection(text: String) {
if (text.matches(digits)) super.replaceSelection(text)
}
}

// when the textfield is empty, replace text with "0"
input.textProperty().addListener { _, _, newValue ->
if (newValue == null || newValue.trim().isEmpty()) input.text = "0"
}

// get a bi-directional bound long-property of the input value
val inputValue = SimpleLongProperty()
input.textProperty().bindBidirectional(inputValue, NumberStringConverter())

// textfield is disabled when the current value is other than "0"
input.disableProperty().bind(inputValue.isNotEqualTo(0))

val increment = Button("Increment")
increment.addEventHandler(ActionEvent.ACTION) { inputValue.set(inputValue.get() + 1) }

// increment button is disabled when input is >= 10
increment.disableProperty().bind(inputValue.greaterThanOrEqualTo(10))

val decrement = Button("Decrement")
decrement.addEventHandler(ActionEvent.ACTION) { inputValue.set(inputValue.get() - 1) }
// decrement button is disabled when input is <= 0
decrement.disableProperty().bind(inputValue.lessThanOrEqualTo(0))

// layout
val root = VBox()
root.children.add(input)
val buttons = HBox()
buttons.children.addAll(increment, decrement)
root.children.add(buttons)

stage.scene = Scene(root)
stage.sizeToScene()
stage.show()
}
}

fun main(args: Array<String>) {
Application.launch(InteractFX::class.java, *args)
}</lang>


=={{header|Liberty BASIC}}==
=={{header|Liberty BASIC}}==