2013-12-10 75 views
0

我是JavaFX的新手。我需要在已經創建的按鈕點擊上打開另一個屏幕。
爲此,我嘗試搜索,但沒有得到任何幫助,因爲我找到的每個教程都重定向以創建新屏幕。但我想打開已經創建的屏幕。打開按鈕上的現有屏幕點擊

爲此, 我寫下面的代碼controller.java

@FXML 
public void handleNewTestBedButtonAction(ActionEvent event) throws IOException { 


    URL url = getClass().getResource("com/sobc/testbed/gui/testbedform.fxml"); 

    FXMLLoader fxmlloader = new FXMLLoader(); 
    fxmlloader.setLocation(url); 
    fxmlloader.setBuilderFactory(new JavaFXBuilderFactory()); 
    AnchorPane pane = new AnchorPane(); 

    pane.getChildren().clear(); 
    pane.getChildren().add((Node) fxmlloader.load(url.openStream())); 
    // here we go 
    //((SOARiteController) fxmlloader.getController()).setContext(); 
} 

FXML代碼

<Button id="newtestbedbtn" fx:id="newTestBedButtonId" mnemonicParsing="false" onAction="#handleNewTestBedButtonAction" onMouseEntered="#NewTestBedButtonMouseEntered" onMouseExited="#NewTestBedButtonMouseExited" styleClass="imgbtn" text="" wrapText="false"> 

但我得到以下異常

Caused by: java.lang.NullPointerException 
at com.soab.SOARiteController.handleNewTestBedButtonAction(SOARiteController.java:52) 

我不明白如何在另一個屏幕上打開一個屏幕。

請給我參考或提示。

回答

1

使用以下代碼替換您的Fxml加載器,這是加載fxml文件的正確方法。

URL url = getClass().getResource("com/sobc/testbed/gui/testbedform.fxml"); 
FXMLLoader loader = new FXMLLoader(url); 
Node node = (Node) loader.load();