现在我正在尝试使用 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/