2

このメソッドは、用語集の1つのエントリの2つの定義を2つマージすることになっています。GlossaryEntryMergeUIクラス(JFrameの拡張)のインスタンスを作成し、ユーザーにマージプロセスを案内します。ユーザーがボタンをクリックして送信すると、ウィンドウが閉じます。マージメソッドは、マージされた定義を抽出し、結合された用語集エントリを返します。

マージメソッドにMergeUIからの応答を待機させる最良の方法は何ですか?InvokeAndWaitを使用してみましたが、それを機能させる方法がわかりませんでした。

public GlossaryEntry merge(GlossaryEntry otherEntry){
    //First, merge the definitions
    GlossaryEntryMergeUI thisMerge = new GlossaryEntryMergeUI(this,otherEntry,mergeSignal);
    thisMerge.setVisible(true);
    thisMerge.setAlwaysOnTop(true);

    GlossaryEntry combined = new GlossaryEntry(word);
    combined.addDefinitions(thisMerge.getDefinitions());

    return combined;
}
4

2 に答える 2

2
  • 2つ以上のWindowsを切り替えるのではなく、CardLayoutを探すことを検討してください

  • SerializableまたはObservateがある場合は、コードをinvokeAndWait()にラップすることをお勧めします。これは、2つのWindowsを簡単に切り替えるためにinvokeLater()があります。

  • 2つのJFrameを同時に使用しないことをお勧めします。1つのJFrameと別のウィンドウはJDialodまたはJWindowになります。これは、(たとえば、BackGroungタスクがある場合)JFrameをFrontに移動しないように、Focusを1つのJFrameから別のJFrameに移動するのが非常に難しい場合があるためです。 ()..。

于 2011-10-07T14:39:56.927 に答える
2

これは、invokeAndWaitまたはinvokeLaterの使用とは関係がなく、あるスレッドで別のスレッドの応答をリッスンすることと関係があります。JOptionPane(非常に使いやすく、必要に応じて非常に複雑なGUIを保持できます)などのモーダルダイアログを使用していない場合は、リスナーまたはオブザーバーデザインパターンと呼ばれるものを使用して、 -GUIが実行されたときのGUIコンポーネント。

また、GlossaryEntryMergeUIは、ユーザーが接触する唯一のGUIですか?それとも、別のGUI、おそらく「親」GUIから呼び出されますか?後者の場合は、JFrameではなくモーダルダイアログが最適です。編集:またはmKorbelの優れた答えによるCardLayout。

于 2011-10-07T21:05:54.147 に答える