osk*_*rko 6 java mouse events netbeans javafx
当我点击一个按钮时,它会改变它的位置.
但是当我移动鼠标时,按钮会回到场景的中心,为什么?
我有以下代码:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
jew*_*sea 18
建议的方法
对于您的特定代码段,可能使用Pane而不是StackPane是最好的方法.
为什么你的代码没有做你想要的
如果要手动设置布局值,请不要使用自动为您设置布局值的布局窗格(例如StackPane).如果使用布局窗格,则下次布局窗格执行布局传递时将自动覆盖您显式设置的布局值(例如,调整大小或其场景图中的某些内容或位置变脏).
明确布置节点的选项
如果要在JavaFX中显式布局项,请执行以下操作之一:
有关节点定位的相关建议
如果您希望使用预定义的布局管理器自动布局组件,但想要从默认位置调整或临时修改某些组件的位置,则可以调整translateX/Y值而不是layoutX/Y值.根据translateX的定义:
节点的最终转换将计算为layoutX + translateX,其中layoutX建立节点的稳定位置,translateX可选择对该位置进行动态调整.此变量可用于更改节点的位置而不会干扰其layoutBounds,这使得它可用于动画节点的位置.
这意味着布局管理器可以使用计算子项的默认位置layoutX,您可以使用默认值调整位置translateX.