1. Main.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | package application; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.stage.Stage; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.layout.BorderPane; public class Main extends Application { @Override public void start(Stage primaryStage) { try { Parent root = new FXMLLoader().load(getClass().getResource("/application/Main.fxml")); Scene scene = new Scene(root,400,400); scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); primaryStage.setScene(scene); primaryStage.show(); } catch(Exception e) { e.printStackTrace(); } } public static void main(String[] args) { launch(args); } } | cs |
2. Main.fxml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.Button?> <?import javafx.scene.control.Label?> <?import javafx.scene.layout.AnchorPane?> <AnchorPane prefHeight="300.0" prefWidth="300.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.60" fx:controller="application.MainController"> <children> <Button layoutX="116.0" layoutY="209.0" mnemonicParsing="false" onAction="#BtnClick" text="Button" /> <Label fx:id="lblStatus" layoutX="90.0" layoutY="57.0" prefHeight="62.0" prefWidth="121.0" text="Label" /> </children> </AnchorPane> | cs |
3. MyNumber.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | package application; import javafx.beans.property.*; public class MyNumber { private DoubleProperty number; public double getNumber() { if(number != null){ return number.get(); }else{ return 0; } } public void setNumber(double number) { this.numberProperty().set(number); } public final DoubleProperty numberProperty(){ if(number == null){ number = new SimpleDoubleProperty(0); } return number; } } | cs |
4. MainController.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | package application; import java.net.URL; import java.util.ResourceBundle; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Label; public class MainController implements Initializable { final MyNumber myNum = new MyNumber(); @FXML private Label lblStatus; @Override public void initialize(URL location, ResourceBundle resources) { myNum.setNumber(0); myNum.numberProperty().addListener(new ChangeListener<Object>() { @Override public void changed(ObservableValue<? extends Object> observable, Object oldValue, Object newValue) { lblStatus.setText(new Double(myNum.getNumber()).toString()); } }); } public void BtnClick(ActionEvent event) { myNum.setNumber(myNum.getNumber() + 1); } } | cs |
properties 는 속성, 성질 등을 뜻한다. JavaFX에서 properties 는 '속성 감시' 라는 표현으로 사용된다. 내가 이해한 바로는 속성 값이 변화하면 즉각적으로 변화된 값을 사용할 수 있도록 해주는 기능이다. 구체적으로 속성값에 변화가 발생하면, changelistener 의 changed() 메소드를 호출하여 그 변화된 속성값을 사용할 수 있도록 해주는 것이다.
'Java > JavaFx' 카테고리의 다른 글
JavaFX 19. Bidirectional Binding and using Slider (0) | 2016.08.25 |
---|---|
JavaFX 18. Binding, ProgressBar and ProgressIndicator (0) | 2016.08.25 |
JavaFX 16. FileChooser (0) | 2016.08.25 |
JavaFX 15. TreeView Events (0) | 2016.08.25 |
JavaFx 14. TreeView 사용하기 (0) | 2016.08.17 |