gpt4 book ai didi

java - 在 JavaFX 中显式定位节点

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:43:36 27 4
gpt4 key购买 nike

当我点击一个按钮时,它改变了它的位置。

但是当我移动鼠标时,按钮又回到了场景的中心,为什么?

我有以下代码:

public class HolaMundo extends Application {

Button btn;
Scene scene;

@Override
public void start(Stage primaryStage) {
btn = new Button();
btn.setText("Hola Mundo");

StackPane root = new StackPane();
root.getChildren().add(btn);

scene = new Scene(root, 300, 250);

primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();

scene.setOnMouseMoved(new EventHandler<MouseEvent>(){

@Override
public void handle(MouseEvent t) {
btn.setText(String.valueOf(t.getX() ));
}
});

btn.setOnAction(new EventHandler<ActionEvent>() {

@Override
public void handle(ActionEvent event) {
btn.setLayoutX(Math.random() * (300 - btn.getWidth()));
btn.setLayoutY(Math.random() * (250 - btn.getHeight()));
}
});
}

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

最佳答案

建议的方法

对于您的特定代码片段,可能使用 Pane而不是 StackPane是最好的方法。

为什么您的代码没有按照您的要求执行

如果您要手动设置布局值,请不要使用自动为您设置布局值的布局 Pane (例如 StackPane)。如果您使用布局 Pane ,那么您显式设置的布局值将在下次布局 Pane 执行布局过程时自动覆盖(例如,它被调整大小或者它的某些内容或场景图中的位置变脏)。

明确布局节点的选项

如果您想在 JavaFX 中显式布局项目,请执行以下操作之一:

  1. 子类 Region并覆盖 layoutChildren .
  2. 将您的内容放在 Pane 中如果您需要使用 CSS 设置容器样式或实现调整大小功能。
  3. 将您的内容放在 Group 中如果您不需要使用 CSS 设置容器样式或实现调整大小功能。

节点定位相关建议

如果你想使用预定义的布局管理器自动布局组件,但你想调整或临时修改一些组件的默认位置,你可以调整 translateX/Y 值而不是 layoutX/Y值。根据 translateX 的定义:

The node's final translation will be computed as layoutX + translateX, where layoutX establishes the node's stable position and translateX optionally makes dynamic adjustments to that position. This variable can be used to alter the location of a node without disturbing its layoutBounds, which makes it useful for animating a node's location.

这意味着布局管理器可以使用 layoutX 计算子项的默认位置,并且您可以使用 translateX 调整默认位置。

关于java - 在 JavaFX 中显式定位节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21118394/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com