2017-01-09 44 views
0

我正試圖想出一個簡單的工具,我想調用另一個fxml頁面上的按鈕單擊從當前fxml頁面。 我主要的Java類設計如下:無法通過按鈕單擊事件調用另一個fxml頁面

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.stage.Stage; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.scene.control.TitledPane; 
import javafx.scene.layout.BorderPane; 


public class Main extends Application 
{ 

    @Override 
    public void start(Stage stage) { 
    try { 

     TitledPane page = (TitledPane)FXMLLoader.load(getClass().getResource("NewTest.fxml")); 
     Scene scene = new Scene(page); 
     stage.setScene(scene); 
      stage.setTitle("Welome Page"); 
      stage.show(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

public static void main(String[] args) { 
    Application.launch(Main.class, (java.lang.String[])null); 
}} 

和控制器類被設計爲:

import javafx.event.ActionEvent; 
import java.net.URL; 
import java.util.ResourceBundle; 
import javafx.event.EventHandler; 
import javafx.fxml.FXML; 
import javafx.fxml.FXMLLoader; 
import javafx.fxml.Initializable; 
import javafx.scene.Parent; 
import javafx.scene.control.Button; 
import javafx.scene.control.TitledPane; 
import javafx.stage.Stage; 


public class SimpleController implements Initializable 
{ 

    @FXML // fx:id="loginbtn" 
    private Button loginbtn; // Value injected by FXMLLoader 


    @Override // This method is called by the FXMLLoader when 
       initialization is complete 
    public void initialize(URL fxmlFileLocation, ResourceBundle resources) { 
    assert loginbtn != null : "fx:id=\"myButton\" was not injected: check your FXML file 'simple.fxml'."; 

    // initialize your logic here: all @FXML variables will have been injected 
    loginbtn.setOnAction(new EventHandler<ActionEvent>() { 

     public void handle(ActionEvent event) { 
      Stage stage; 
      Parent root; 
      if(event.getSource()==loginbtn){ 
       //get reference to the button's stage   
       stage=(Stage) loginbtn.getScene().getWindow(); 
       //load up OTHER FXML document 
       try{ 
        TitledPane page =(TitledPane) FXMLLoader.load(getClass().getResource("secondPage.fxml")); 
       }catch(Exception e) 
       {e.printStackTrace();} 
       } 
     } 
    }); 
} 
} 

而且FXML頁是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<?import javafx.scene.control.Button?> 
<?import javafx.scene.control.Label?> 
<?import javafx.scene.control.PasswordField?> 
<?import javafx.scene.control.TextArea?> 
<?import javafx.scene.control.TitledPane?> 
<?import javafx.scene.layout.AnchorPane?> 
<?import javafx.scene.text.Font?> 

<TitledPane text="Welcome to the Vacation Planner" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1"> 
    <content> 
     <AnchorPane prefHeight="330.0" prefWidth="497.0"> 
     <children> 
      <Label layoutX="14.0" layoutY="52.0" prefHeight="25.0" prefWidth="189.0" text="User Name"> 
       <font> 
        <Font size="24.0" /> 
       </font> 
      </Label> 
      <TextArea layoutX="53.0" layoutY="106.0" prefHeight="41.0" prefWidth="391.0" /> 
       <Label layoutX="14.0" layoutY="165.0" text="Password"> 
       <font> 
        <Font size="24.0" /> 
      </font> 
     </Label> 
     <Button fx:id="loginbtn" layoutX="114.0" layoutY="262.0" mnemonicParsing="false" text="Login"> 
      <font> 
       <Font size="18.0" /> 
      </font> 
     </Button> 
     <Button fx:id="exitbtn" layoutX="271.0" layoutY="262.0" mnemonicParsing="false" text="Exit"> 
      <font> 
       <Font size="18.0" /> 
      </font> 
      </Button> 
      <PasswordField layoutX="53.0" layoutY="207.0" prefHeight="39.0" prefWidth="391.0" /> 
     </children> 
     </AnchorPane> 
     </content> 
     </TitledPane> 

當我點擊按鈕登錄它不是打開第二個XML頁面,我試圖打開按鈕單擊。

在此先感謝。

回答

1

您加載Node s,然後不做任何處理。

你需要將它們添加到現有場景或更換場景:

try{ 
    TitledPane page =(TitledPane) FXMLLoader.load(getClass().getResource("secondPage.fxml")); 
    Scene newScene = new Scene(page); 
    stage.setScene(newScene); 
} catch(Exception e) { 
    e.printStackTrace(); 
} 

而且你有沒有關聯與FXML控制器。使用例如在fx:controller屬性與控制器類的完全限定類名在FXML的根要做到這一點:

<TitledPane text="Welcome to the Vacation Planner" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="my.package.SimpleController"> 

my.package將包含控制器的封裝。

+0

嗨,我試着給我們你已經建議的代碼仍然沒有打開我想打開的fxml頁面。 – priya89

+0

@ priya89我沒有看到你沒有在任何地方使用控制器類;現在編輯答案...順便說一句:我假設控制器編譯,而不是導致編譯時異常,因爲'初始化完成'不是內部註釋 – fabian

+0

是的得到了..謝謝你的答案.. :) – priya89

相關問題