1

私は現在、小さなアプリケーションをSwingからJavaFXに再コーディングしています。これは、現在Web用に持っているものをデプロイする最も簡単な方法のように思えたためです。

私は非常に単純なことをすることができないようで、ドキュメントや他の投稿で迷子になっています:

とにかく、関連するFXMLファイルを呼び出すメインコントローラーがあります。

public void start(Stage stage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("Login.fxml"));

    Scene scene = new Scene(root);

    stage.setScene(scene);
    stage.show();
}

これで、Login.fxmlからボタンがあり、そのボタンで別のFXMLファイルを開くことができます。ボタンを正常にロードすることはできますが、多くのことを試しましたが、機能しません。私はこのようなことを試みています:

private void handleButtonAction(ActionEvent event){

    FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("GeneradorBases.fxml"));

   // fxmlLoader.setRoot(this); 
  //  fxmlLoader.setController(this);

    try {
        fxmlLoader.load(); 

    }
    catch (IOException e){
       throw new RuntimeException(e); 
    }
}

Stackoverflowでここで見た例に従おうとしました。基本的に、.setRootと.setControllerはアプリケーションをクラッシュさせます。.load()でもそれを行います。

これを機能させる方法について何かアドバイスはありますか?

4

3 に答える 3

3

リストした例外を前提として、@FXMLおよびクラスpacket.OtherControllerController publicでマークされたすべてのフィールドを設定する必要があります。

更新:もう1つの問題は、FXMLロードの結果を何にも割り当てないことです。

public class FirstController implements Initializable {

  @FXML
  public void handleButtonAction(ActionEvent event) throws Exception{
    Node node = (Node) event.getSource();
    Stage stage = (Stage) node.getScene().getWindow();
    Scene scene = stage.getScene();

    FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("Second.fxml"));
    Parent root = (Parent) fxmlLoader.load();          

    scene.setRoot(root);
  }
}

拡張例については、チュートリアルを参照してください:http: //docs.oracle.com/javafx/2/get_started/fxml_tutorial.htm

于 2012-11-05T11:22:14.143 に答える
1

あなたのソリューションは、によってロードされたノードでは何もしませんfxmlLoader.load()。ロードされた FXML ファイルを表示するには、戻り値をメイン コントローラー (またはステージまたはシーンを管理するコードの別の部分) に渡し、それを新しいルート (またはペインの子など) として設定する必要があります。表示する必要があります)。

于 2012-11-05T08:34:46.263 に答える