━━━━ ◇ ━━━━
Java/JavaFx

JavaFX 17. Properties

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
COMMENT