2011-10-07 43 views
2

该方法应该合并词汇表中单个词条的两个条目的两个定义。它创建GlossaryEntryMergeUI类的一个实例(JFrame的扩展),它将引导用户完成合并过程。用户点击一个按钮提交并关闭窗口。合并方法提取合并的定义并返回组合的词汇表条目。使用invokeLater或invokeAndWait等待来自另一个GUI的响应

使合并方法等待来自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; 
} 

回答

2
  • 考虑寻找CardLayout代替开关两个或多个窗口之间

  • 如果是有序列化或Observate的话,最好是换码到invokeAndWait(),用于之间的简单切换因为(例如,是否存在BackGroung任务),我建议不要在同一时间使用两个JFrame,一个JFrame和另一个Window将是JDialod或JWindow。 ometimes是这么难开关等焦点从一个JFrame的另一个,不用动的JFrame toFront()...

2

这有什么做用invokeAndWait或invokeLater的,所有的做在一个线程监听在另一个响应。如果你没有为此使用模态对话框,比如JOptionPane(这很容易使用,并且如果需要可以容纳一个非常复杂的GUI),可以考虑使用一个监听器或者被称为观察者设计模式来通知非-GUI组件,当GUI已经被执行时。

另外,GlossaryEntryMergeUI是用户接触的唯一GUI吗?还是从另一个GUI调用,也许是“父”GUI?如果是后者,那么模式对话框,而不是JFrame是要走的路。按照mKorbel的出色答案编辑:或CardLayout。

+0

有趣的是,现在这个问题让我感动了 – mKorbel

+0

@mKorbel:请检查编辑。 1+ –