获得FXML生成节点的大小

时间:2015-09-30 19:26:21

标签: javafx

我希望得到一个节点的大小,在它已经正确调整大小之后,我理解这是在显示舞台之后完成的。但是,我无法在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异常。 有没有办法在不使用睡眠线的情况下获得尺寸?

0 个答案:

没有答案