2017-07-03 19 views
-2

ユーザは、ポップアップセカンドシーンを開くボタンをクリックすると、ユーザはいくつかの値を選択して閉じることができ、選択を最初のシーンに渡すことができます。独自のコントローラを持つポップアップシーンからメインコントローラにパラメータを渡す

まずコントローラー

Set<String> set; 
public void initialize(URL url, ResourceBundle rb){ 
set = new TreeSet<String>(): 
} 
@FXML 
public Set<String> addValue (MouseEvent e) throws IOException { 
Stage stage = new Stage(); 
root = FXMLoader.load(getClass).getResources(2ndFXML.fxml); 
stage.initModality(Modality.APPLICATION_MODAL); 
stage.iniOwner(clickedButton.getScene().getWindow(); 
stage.showAndWait(): 
return set; 
} 

第二コントローラー

@FXML 
public void addSelection (MouseEvent e) throws IOException { 
if (event.getSource() == button){ 
    stage = (Stage) button.getScene().getWindow(); 
    set.addAll(listSelection) 
    stage.close 
} 

しかし、値が最初のコントローラに戻ってそれを作ることはありません。

+0

「セット」に何も追加していないためです。私が間違っているなら私を訂正してください。ユーザーはどこから値を選択しますか?それは 'ListView'ですか? – Yahya

+0

イベントハンドラに戻り値があることは絶対にありません。実際にはメソッドを呼び出さないので(JavaFXイベント処理フレームワークから呼び出されます)、返す値を決して処理することはできません。とにかく 'set'とは何ですか?定義されている場所とその場所はどこにありますか?最初のコントローラで実際に何をしたいのですか? –

+0

が更新されました。リストビューから選択したものをセットに追加し、それを最初のコントローラに渡そうとしています – Moe

答えて

2

あなたがshowAndWait()を使用しているので、あなたがする必要があるすべては、第二のコントローラ内のデータ用のアクセサメソッドを定義している:

public class SecondController { 

    private final Set<String> selectedData = new TreeSet<>(); 

    public Set<String> getSelectedData() { 
     return selectedData ; 
    } 

    @FXML 
    private void addSelection (MouseEvent e) { 
     // it almost never makes sense to define an event handler on a button, btw 
     // and it rarely makes sense to test the source of the event 
     if (event.getSource() == button){ 
      stage = (Stage) button.getScene().getWindow(); 
      selectedData.addAll(listSelection) 
      stage.close(); 
     } 
    } 

} 

ウィンドウが閉じられたときに、第1のコントローラでそれを取得します:

@FXML 
public void addValue(MouseEvent e) throws IOException { 

    Stage stage = new Stage(); 
    FXMLLoader loader = new FXMLLoader(getClass().getResource(2ndFXML.fxml)); 
    Parent root = loader.load(); 
    // I guess you forgot this line???? 
    stage.setScene(new Scene(root)); 
    stage.initModality(Modality.APPLICATION_MODAL); 
    stage.iniOwner(clickedButton.getScene().getWindow(); 
    stage.showAndWait(); 

    SecondController secondController = loader.getController(); 
    Set<String> selectedData = secondController.getSelectedData(); 
    // do whatever you need to do with the data... 

} 
+0

私はそれを行う方法親ルート= FXMMLoader.load(getClass().....)しかし、私はエラーを取得しているあなたの方法をして負荷を解決できないのですか?新しいFXMLoader.load(....) – Moe

+0

ありがとうJames、私はステージを閉じた後にコントローラを手に入れることができるか分からなかった。 – Moe

+0

@Moe FXMLをロードした後はいつでもコントローラを取得できます。 –

関連する問題