2016-04-25 7 views
0

私はJavaFXを使用していて、今はSchoolprojectで作業しています。別のクラスのActionEventを処理する方法

私のプログラムについて、私はログイン画面を持っています。私がログインを押すと、私はメインフレームに来ます。メニューバーのボタンを使用するときにメインフレームを構築するAnchorPaneのコンテンツをロードするため、メインフレームのコンテンツ領域は空です。

私がログインボタンを押すと、メインフレームとホームペインをその中に描こうと思っています。しかし、別のクラスからメインフレームにペインをロードする方法がわかりません。

ここに私のコード:

コードメインフレームをロードする:メインフレームに自宅ペインをLAODする

@FXML 
protected void login(ActionEvent event) throws IOException, URISyntaxException { 
    Stage stage; 
    Parent root = null; 
    stage = (Stage) btnLogin.getScene().getWindow(); 
    try{ 
     root = FXMLLoader.load(getClass().getResource("view/mainframe.fxml")); 
     } catch (IOException e){ 
      e.printStackTrace(); 
     } 
    Scene scene = new Scene(root, 1280, 900); 
    stage.setScene(scene); 
    stage.show();  

} 

コード:

@FXML 
protected void mHome(ActionEvent event) throws IOException, URISyntaxException { 

    try {      
     URL url = getClass().getResource("view/home.fxml"); 
     FXMLLoader fxmlLoader = new FXMLLoader(); 
     fxmlLoader.setLocation(url); 
     fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory()); 
     AnchorPane page = (AnchorPane) fxmlLoader.load(url.openStream()); 

     aContent.getChildren().clear(); 
     aContent.getChildren().add(page); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

これらの2つの方法が異なるクラスです。あなたには、いくつかのより多くの情報が必要な場合

、私に知らせてください:)

ありがとうと挨拶し、ティモ

答えて

0

ちょうどmHome()メソッドを呼び出します。 ActionEventは決して使用しないので、メソッドシグネチャから省略することができます(FXMLLoaderはそれをイベントハンドラとして引き続きマップできます)。

:あなた 常にがメインペインが最初に表示されたときにちょうど同じコントローラクラスで initialize()メソッドへ mHomeに呼び出しを追加し、「ホーム・ペイン」を表示したい場合はそう

@FXML 
protected void mHome() throws IOException, URISyntaxException { 

    try {      
     URL url = getClass().getResource("view/home.fxml"); 
     FXMLLoader fxmlLoader = new FXMLLoader(); 
     fxmlLoader.setLocation(url); 
     fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory()); 
     AnchorPane page = (AnchorPane) fxmlLoader.load(url.openStream()); 

     aContent.getChildren().clear(); 
     aContent.getChildren().add(page); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

に変更します また

public void initialize() { 
    // existing code... 

    mHome(); 
} 

、ログインペインからそれをロードするときにのみ特異ログインハンドラ内mHomeに呼び出しを追加し、「ホーム・ペイン」を表示する場合:

@FXML 
protected void login(ActionEvent event) throws IOException, URISyntaxException { 
    Stage stage; 
    Parent root = null; 
    stage = (Stage) btnLogin.getScene().getWindow(); 
    try{ 
     FXMLLoader loader = new FXMLLoader(getClass().getResource("view/mainframe.fxml")); 
     root = loader.load(); 
     MainController controller = loader.getController(); 
     controller.mHome(); 
    } catch (Exception e){ 
     e.printStackTrace(); 
    } 
    Scene scene = new Scene(root, 1280, 900); 
    stage.setScene(scene); 
    stage.show();  

} 

MainControllerは、コントローラクラスの名前はmainframe.fxmlです。明らかに必要に応じて調整してください)

+0

OK、試してみました。問題は今私がこれをコードに実装したことです: 'aContent.getChildren()。clear(); aContent.getChildren()。add(ページ); ' 新しいfxmlをペインに追加する前に、AnchorPane aContentをクリアします。しかし、今は空ですので、それをクリアすることはできませんし、私にエラーを与える... – TeemoBiceps

関連する問題