JavaFX中带窗格的文本绑定

JavaFX中带窗格的文本绑定,java,javafx,text,dynamic,bind,Java,Javafx,Text,Dynamic,Bind,大家好,我有一个程序,使用多个弧和文本创建pi图表。我将centerX和centerY属性值绑定到窗格宽度和高度的一半,以使pi图表即使在重新调整窗口时也保持在中间。然而,我试图以同样的方式将文本绑定到窗格,但什么也看不出来。现在,我只是手动输入x和y值,将文本放在正确的位置,但是如果我重新调整窗口,piChart会停留在中间,但文本不会。如果文本看起来像链接中的图片,但即使我更改了窗口的大小也会保持这种状态,我如何编辑文本以使其更具动态性?您知道已经有一个PieChart类可用于在饼图中表示数


大家好,我有一个程序,使用多个弧和文本创建pi图表。我将centerX和centerY属性值绑定到窗格宽度和高度的一半,以使pi图表即使在重新调整窗口时也保持在中间。然而,我试图以同样的方式将文本绑定到窗格,但什么也看不出来。现在,我只是手动输入x和y值,将文本放在正确的位置,但是如果我重新调整窗口,piChart会停留在中间,但文本不会。如果文本看起来像链接中的图片,但即使我更改了窗口的大小也会保持这种状态,我如何编辑文本以使其更具动态性?

您知道已经有一个PieChart类可用于在饼图中表示数据,对吗?是的,但这只是帮助我理解javaFx中绑定的一个特定示例。在这种情况下,您需要找到每个文本的位置(这里有一些数学),然后绑定文本。layoutXProperty()&Text.layoutProperty()。
import javafx.stage.Stage;
import javafx.application.Application;
import javafx.geometry.*;
import javafx.scene.layout.*;
import javafx.scene.shape.*;
import javafx.scene.paint.*;
import javafx.scene.Scene;
import javafx.scene.text.*;

public class PieChart extends Application{
    public void start(Stage primaryStage) {
    final double WIDTH = 600;
    final double HEIGHT = 600;
    Pane pane = new Pane();
    pane.setStyle("-fx-background-color: lightBlue");
    Arc arc1 = new Arc(WIDTH / 2, HEIGHT / 2, 200, 200, 0, 72);
    arc1.centerXProperty().bind(pane.widthProperty().divide(2));
    arc1.centerYProperty().bind(pane.heightProperty().divide(2));
    arc1.setType(ArcType.ROUND);
    arc1.setFill(Color.RED);
    Text text1 = new Text(375, 250, "Project -- 20%");

    Arc arc2 = new Arc(WIDTH / 2, HEIGHT / 2, 200, 200, 72, 36);
    arc2.centerXProperty().bind(pane.widthProperty().divide(2));
    arc2.centerYProperty().bind(pane.heightProperty().divide(2));
    arc2.setType(ArcType.ROUND);
    arc2.setFill(Color.BLUE);
    Text text2 = new Text(270, 95, "Quiz -- 10%");

    Arc arc3 = new Arc(WIDTH / 2, HEIGHT / 2, 200, 200, 108, 108);
    Text text3 = new Text(150, 250, "Midterm -- 30%");
    arc3.centerXProperty().bind(pane.widthProperty().divide(2));
    arc3.centerYProperty().bind(pane.heightProperty().divide(2));
    arc3.setType(ArcType.ROUND);
    arc3.setFill(Color.GREEN);

    Arc arc4 = new Arc(WIDTH / 2, HEIGHT / 2, 200, 200, 216, 144);
    Text text4 = new Text(300, 400, "Final -- 40%");
    arc4.centerXProperty().bind(pane.widthProperty().divide(2));
    arc4.centerYProperty().bind(pane.heightProperty().divide(2));
    arc4.setType(ArcType.ROUND);
    arc4.setFill(Color.ORANGE);
    pane.getChildren().addAll(arc1, arc2, arc3, arc4, text1, text2, text3, text4);

    Scene scene = new Scene(pane, WIDTH, HEIGHT);
    primaryStage.setTitle("Pie Chart");
    primaryStage.setScene(scene);
    primaryStage.show();
}

public static void main(String[] args) {
    Application.launch(args);
}
}