我正在使用NetBeans IDE 8.2 for JavaFX。我已经知道,为了改变按钮的位置,我需要使用setLayoutX / Y.我试过这个,对按钮没有任何影响。这是我的代码:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package javafxapplication2;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
/**
*
* @author coolDawg1234
*/
public class JavaFXApplication2 extends Application {
@Override
public void start(Stage primaryStage) {
String x = "1";
String y = "0";
Button btn1 = new Button(x);
btn1.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.print(x);
}
});
Button btn2 = new Button(y);
btn2.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.print(y);
}
});
StackPane root = new StackPane();
root.getChildren().add(btn1);
btn1.setLayoutX(250);
btn1.setLayoutY(220);
root.getChildren().add(btn2);
btn1.setLayoutX(200);
btn1.setLayoutY(200);
Scene scene = new Scene(root, 1000, 1000);
primaryStage.setTitle("WHAT\'s GOOD MY MANS");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
Netbeans为此给出了0个错误,除了按钮位置之外的所有内容对我来说都很好。
请帮我找到问题所在。
答案 0 :(得分:5)
按钮的容器是StackPane
。 StackPane
是Pane
的一种实现,默认情况下会将其子项布置在其自身的中心。因此,每当场景需要执行布局时,StackPane
将根据其layoutX
方法设置layoutY
和layoutChildren()
值(因此会覆盖您设置的任何内容)自己的布局策略。对Pane
的大多数(如果不是全部)子类都会发生此行为。
如果需要手动定位子节点,则需要使用通用Pane
容器。您可以选择对其进行子类化并提供自己的布局策略/逻辑,也可以直接在子节点上设置layoutX
和layoutY
值。
如果您需要StackPane
提供的布局策略,但您希望它的位置与默认位置略有不同,那么您可能正在寻找translateXProperty()
和translateYProperty()
。