У меня есть HBox с формой по умолчанию и двумя кнопками. Каждый может сгенерировать треугольник и поместить его в объектную форму SHAPE. Моя проблема в том, что у меня нет способа привязать содержимое HBox к ObjectProperty. У кого-нибудь есть идеи о том, как этого добиться, пожалуйста?
пакет stackOverflow;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Polygon;
import javafx.stage.Stage;
public class BoxContent extends Application
{
// property accessible to buttons
ObjectProperty SHAPE = new SimpleObjectProperty();
// shape method
Polygon getDownGreenTriangle() {
Polygon polygon = new Polygon(0.0, 0.0, 15.0, 0.0, 7.5, 15.0);
polygon.setFill(Color.LIGHTGREEN);
return polygon; }
// shape method
Polygon getUpRedTriangle() {
Polygon polygon = new Polygon(0.0, 0.0, 15.0, 0.0, 7.5, 15.0);
polygon.setFill(Color.RED);
SHAPE.set(polygon);
return polygon; }
// default circle
Circle circle = new Circle(10, Color.GREY);
@Override
public void start(Stage stage) throws Exception {
// box not available to buttons (how to bind content?)
HBox hbox = new HBox();
hbox.getChildren().add(circle);
// buttons
Button GREEN = new Button("Green");
Button RED = new Button("Red");
// actions
GREEN.setOnAction(e -> {
Platform.runLater(() -> {
SHAPE.set(getDownGreenTriangle());
}); });
RED.setOnAction(e -> {
Platform.runLater(() -> {
SHAPE.set(getDownGreenTriangle());
}); });
// pane
GridPane root = new GridPane();
root.setHgap(10);
root.setVgap(10);
root.add(hbox, 1, 1);
root.add(RED, 2, 1);
root.add(GREEN, 3, 1);
Scene scene = new Scene(root, 160, 45);
stage.setScene(scene);
stage.show();
} // end start
public static void main(String[] args)
{
launch(args);
}
}