我使用的是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个错误,除了按钮的位置之外,其他一切都很好。
请帮我找到我的问题。
2条答案
按热度按时间zu0ti5jz1#
按钮的容器是
StackPane
。StackPane
是Pane
的一个实现,默认情况下,它会将其子项布局在自身的中心。因此,每当场景需要执行布局时,StackPane
将设置layoutX
和layoutY
的值(因此会覆盖您设置的任何内容)。这种行为发生在大多数(如果不是全部)Pane
的子类中。如果需要手动定位子节点,则需要使用通用的
Pane
容器。您可以选择将其子类化并提供自己的布局策略/逻辑,也可以直接在子节点上设置layoutX
和layoutY
值。如果您需要
StackPane
提供的布局策略,但又希望它的位置与默认位置略有不同,那么您可能需要查找translateXProperty()
和translateYProperty()
。wnrlj8wa2#
只要取右边的变量(consistent)btn1就可以得到同一方向的两个坐标(第31行中的X为250,第34行中的X为200),因此没有直接设置坐标的按钮在该布局中具有坐标(0,0)。