package ch.fhnw.oop2.lecture07; import javafx.beans.property.DoubleProperty; import javafx.beans.property.StringProperty; import javafx.geometry.Insets; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.Slider; import javafx.scene.control.TextField; import javafx.scene.layout.VBox; /** * Created by Kelvin on 12-Apr-16. */ public class ApplicationUI extends VBox { private Label label; private Button button; private TextField textField; private Slider slider; public ApplicationUI() { initControls(); initEventListeners(); initPropertyListeners(); initStyles(); } private void initControls() { button = new Button("+1"); button.setMaxWidth(Double.MAX_VALUE); textField = new TextField("0"); slider = new Slider(0,100, 0); label = new Label(); this.getChildren().add(label); this.getChildren().add(textField); this.getChildren().add(slider); this.getChildren().add(button); } private void initEventListeners() { StringProperty sp = textField.textProperty(); button.setOnAction(event -> { sp.setValue(Integer.toString(Integer.parseInt(sp.getValue()) +1)); }); } private void initPropertyListeners() { DoubleProperty dp = slider.valueProperty(); StringProperty sp = textField.textProperty(); sp.addListener(observable -> { dp.setValue(Integer.parseInt(sp.getValue())); }); dp.addListener((observable, oldValue, newValue) -> { sp.setValue(String.valueOf(newValue.intValue())); }); label.textProperty().bind(dp.asString()); } private void initStyles() { this.setPadding(new Insets(15, 15, 15, 15)); this.setSpacing(5); this.setStyle("-fx-alignment: center"); } }