我希望得到一个节点的大小,在它已经正确调整大小之后,我理解这是在显示舞台之后完成的。但是,我无法在start()方法中执行此操作,因为该节点尚未初始化,因为它是从FXML文件加载的。
如果我实现Initializable Interface并尝试在initialize()方法中获取大小,则返回0.0
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.BorderPane?>
<GridPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="musicPlayer.Test">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<TableView fx:id="testNode">
<columns>
<TableColumn prefWidth="75.0" text="C1" />
<TableColumn prefWidth="75.0" text="C2" />
</columns>
</TableView>
</children>
</GridPane>
只是使用场景构建器
生成的网格窗格中的任意节点public class Test extends Application implements Initializable {
@FXML
private TableView testNode;
public void initialize(URL location, ResourceBundle resources) {
//System.out.println(testNode.getWidth()); is always 0.0
}
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("test.fxml"));
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.show();
//System.out.println(testNode.getWidth()); throws Nullpointer Exception
}
public static void main(String[] args) {
launch(args);
}
}
我也试过在舞台上添加一个监听器,但我仍然得到一个nullpointer异常。 有没有办法在不使用睡眠线的情况下获得尺寸?