我正在使用 javaFX 实现合并排序动画。我想使用绝对坐标来移动形状。我使用 Translatetransition()
的 setToX()
和 setToY()
。然而,这些形状位于具有固定间距的 HBox 中。我尝试将它们移到不同的地方,但它不起作用。 setToX()
和 setToY()
使用 HBox 作为引用。形状始终具有固定的间距,并且形状的顺序不会改变。我使用 getLayoutX() 和 getLayoutY() 来获取绝对坐标。谁能帮帮我?
这些是相关代码:
HBox hBox = new HBox(20);
hBox.setAlignment(Pos.CENTER);
hBox.setPadding(new Insets(0,0,0,0));
ArrayList<StackPane> list = new ArrayList<>();
Random random = new Random(5);
for (int i = 0; i < 12; i++) {
int num = random.nextInt(10);
Rectangle rectangle = new Rectangle(40, (num * 10) + 50);
rectangle.setFill(Color.valueOf("#0000FF"));
Text text = new Text(String.valueOf(num));
StackPane stackPane = new StackPane();
stackPane.setPrefSize(rectangle.getWidth(), rectangle.getHeight());
stackPane.setId(String.valueOf(num));
stackPane.getChildren().addAll(rectangle, text);
StackPane.setAlignment(text,Pos.TOP_CENTER);
stackPane.setAlignment(Pos.TOP_CENTER);
list.add(stackPane);
}
hBox.getChildren().addAll(list);
BorderPane borderPane = new BorderPane();
borderPane.setCenter(hBox);
这是翻译功能
private TranslateTransition AddtoOriginal(StackPane sp, double speed,int X,int Y){
TranslateTransition t = new TranslateTransition();
t.setNode(sp);
t.setDuration(Duration.millis(speed));
t.setToX(X);
t.setToY(Y);
return t;
}
这是保存绝对坐标
Scene scene = new Scene(borderPane, 1000, 800);
primaryStage.setTitle("Sorting");
primaryStage.setResizable(false);
primaryStage.setScene(scene);
primaryStage.show();
for (int i = 0; i < 12; i++) {
int centerx = (int) list.get(i).getLayoutX();
int centery = (int) list.get(i).getLayoutY();
CenterX.add(i,centerx);
CenterY.add(i,centery);
System.out.println(centerx);
System.out.println(centery);
}
最佳答案
请使用Group或Pane作为容器而不是Hbox。 HBox 有自己的布局策略,不支持绝对坐标。
关于javaFX:使用translatetransition移动具有绝对坐标的形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42993423/