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);
}
}