通过新添加的面板-JavaFX

时间:2018-10-13 05:17:40

标签: javafx fxml

为了简单起见,我们假设我有一个FXML和一个SplitPane。一方面,我有一个按钮;另一个有一个空的AnchorPane(目前)。

该按钮仅将窗格放在另一个SplitPane文件的FXML的另一侧。新添加的窗格包含一个按钮和一个标签。两个FXML具有相同的控制器,有两个原因:1.添加的窗格FXML在其他地方未使用; 2。添加的窗格FXML的功能太少,以至于不值得为此有一个单独的控制器。

按下新添加的窗格上的按钮会将其标签中的文本设置为"Hello World"

拆分窗格

<SplitPane fx:controller="myController".... >
    <items>
       <VBox .... >
           <Button fx:id="mainButton" onAction="#handleFirstButton".... />
       </VBox>
       <AnchorPane fx:id="secondPane" ....>
    </items>
</SplitPane>

已添加窗格

<VBox fx:controller="myController" ....>
    <Button fx:id="btn" onAction="#changeText" ... />
    <Label fx:id="lbl" .... />
</VBox>

控制器类

// Regular stuff here

    @FXML
    AnchorPane secondPane;

    @FXML
    Button mainButton;

    @FXML
    Button btn;

    @FXML
    Label lbl;

    public void initialize(URL arg0, ResourceBundle arg1) {
    }

    private void loadSecondPane {
        FXMLLoader loader = FXMLLoader.load(getClass().getResource("AddedPane.fxml"));
        VBox box = loader.load();

        secondPane.setTopAnchor(box);    
    }

    @FXML
    private void handleFirstButton(ActionEvent event) {
        loadSecondPane();
    }

    @FXML
    private void changeText(ActionEvent event) {
        lbl.setText("Hello World");
    }

问题是,当加载“添加的窗格”时,将不会在控制器中定义其组件,并且尝试对其执行任何方法将产生NullPointerException

在这种情况下是否可以解决?还是必须使用单独的控制器?并假设我在窗格的第一侧有2个以上的按钮,而每个按钮在另一侧又产生了一个不同的窗格,解决方案是否保持不变?

注意:我对javafx还是很陌生,所以请原谅任何错误的类型。

0 个答案:

没有答案