java - 为什么 javaFX Circle.getCenterX 在这种情况下不起作用?

标签 java javafx text binding label

现在我正在尝试使用 JavaFX 编写一个简单的算盘。水平轨道上有排列在网格 Pane 中的球,它们通过鼠标单击从一侧移动到另一侧。我正在尝试为 10-1 中的每个球添加标签,但似乎通过简单地将圆圈添加到网格 Pane 中,它们不会分配 CenterX/Y。因为这就是我试图放置文本的方式,所以它根本不显示。我的代码的相关部分是:

    // Stack Gridpane into root pane to organize circles on rails
    GridPane grid = new GridPane();

    // loop to instantiate all circles in a 5x10 grid, add to gridpane
    for (int row = 0; row < 5; row++) {
        for (int count = 10; count > 0; count--) {
            Circle circle = new Circle() ;
            circle.setRadius(20);
            grid.add(circle,count,row);

            // generate Labels and position on circle
            Text label = new Text(Integer.toString(count));
            label.getStyleClass().add("text");
            label.setX(circle.getCenterX());
            label.setY(circle.getCenterY());

            //bind label to circle movement
            label.translateXProperty().bind(circle.translateXProperty());
            root.getChildren().add(label);
        }

    }

    root.getChildren().add(grid);

当我添加 System.out.println(label) 时,我可以看到标签已正确生成,但坐标始终保持在 0/0。圆圈本身按照预期的方式排列在网格中。任何帮助将不胜感激!

最佳答案

我发现这里存在一些问题。

首先,当节点位于某种管理布局的 Pane 子类中时,setX()setY() 不起作用你。这是因为布局管理器在尝试布局其子级时将覆盖此值。

其次,您将标签添加到根节点,这将使所有文本聚集在同一位置。

这就是我要做的,使用StackPane,它允许您将多个节点堆叠在同一位置。此外,它会自动将所有子项居中。

// Stack Gridpane into root pane to organize circles on rails
GridPane grid = new GridPane();

// loop to instantiate all circles in a 5x10 grid, add to gridpane
for (int row = 0; row < 5; row++) {
    for (int count = 10; count > 0; count--) {
        StackPane sp = new StackPane();
        grid.add(sp, count, row);

        Circle circle = new Circle();
        circle.setRadius(20);

        // generate Labels and position on circle
        Text label = new Text(Integer.toString(count));
        label.getStyleClass().add("text");
        label.setFill(Color.RED); // Added so it's visible

        // Don't need these
        //label.setX(circle.getCenterX());
        //label.setY(circle.getCenterY());

        //bind label to circle movement
        //label.translateXProperty().bind(circle.translateXProperty());
        //root.getChildren().add(label);

        // Add circle and label to StackPane so it'll handle layout for you
        sp.getChildren().addAll(circle, label);
    }
}
root.getChildren().add(grid);

据我所知,您确实有一些翻译意图。这会有点棘手,具体取决于您到底需要什么。

关于java - 为什么 javaFX Circle.getCenterX 在这种情况下不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51092814/

相关文章:

java - 当将 Boolean 转换为 boolean 时 Eclipse 可以给我警告吗

java - 'delete' 中函数 'SQLiteDataBase' 的文档中的错误

JavaFX有没有办法包含PDF文件

java - 用于获取 JavaFX WebView 控制台事件的公共(public) API 是什么?

ruby - 如何根据 Ruby 中的单词列表有效地检查文本?

java - 边界框中的 itext 多行文本

java - 如何从 .conf 运行 jar?

JavaFX TableColumn 图形不隐藏

c++ - 如何在头文件c++中定义ofstream变量

java - 从集合中获取对象