Java/17. JavaFX

Day 26 : JavaFX 속성 감시와 바인딩 - Bindings 클래스

pancakemaker 2021. 11. 24. 09:13

Bindings 클래스 : 속성을 연산하거나, 다른 타입으로 변환 후 바인딩하는 기능 제공

 

Circle 배치

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.*?>
<?import javafx.scene.shape.*?>

<AnchorPane xmlns:fx="http://javafx.com/fxml" 
				fx:id="root" 
				fx:controller="sec06.exam03_bindings.RootController"
				prefHeight="200.0" prefWidth="300.0" >
   <children>
      <Circle fx:id="circle" fill="blue" radius="50.0" stroke="BLACK" />
   </children>
</AnchorPane>

 

연산된 속성 바인딩

package sec06.exam03_property_bindings;

import java.net.URL;
import java.util.ResourceBundle;

import javafx.beans.binding.Bindings;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.layout.AnchorPane;
import javafx.scene.shape.Circle;

public class RootController implements Initializable {
	@FXML private AnchorPane root;
	@FXML private Circle circle;

	@Override
	public void initialize(URL location, ResourceBundle resources) {
		circle.centerXProperty().bind(Bindings.divide(root.widthProperty(), 2));
		circle.centerYProperty().bind(Bindings.divide(root.heightProperty(), 2));	
	}
}

 

실행 클래스

package sec06.exam03_property_bindings;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class AppMain extends Application {
	@Override
	public void start(Stage primaryStage) throws Exception {
		Parent root = (Parent)FXMLLoader.load(getClass().getResource("root.fxml"));
		Scene scene = new Scene(root);
		
		primaryStage.setTitle("AppMain");
		primaryStage.setScene(scene);
		primaryStage.show();
	}
	
	public static void main(String[] args) {
		launch(args);
	}
}