2

此方法应该将两个条目的定义合并为一个词汇表中的单个条目。它创建 GlossaryEntryMergeUI 类(JFrame 的扩展)的实例,引导用户完成合并过程。用户单击按钮提交,窗口关闭。merge 方法提取合并的定义并返回合并的词汇表条目。

使合并方法等待 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

这与使用 invokeAndWait 或 invokeLater 无关,而与在一个线程上侦听另一个线程的响应无关。如果您没有为此使用模态对话框,例如 JOptionPane(它非常易于使用,并且如果需要可以容纳非常复杂的 GUI),请考虑使用侦听器或称为观察者设计模式来通知非-当 GUI 被操作时的 GUI 组件。

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

于 2011-10-07T21:05:54.147 回答
2
  • 考虑寻找CardLayout而不是在两个或多个 Windows 之间切换

  • 如果有Seri​​alizable或Observate,那么最好将代码包装到invokeAndWait()中,对于两个Windows之间的简单切换有invokeLater()

  • 我建议不要同时使用两个 JFrame,一个 JFrame 和另一个 Window 将是 JDialod 或 JWindow,因为(例如,如果有 BackGroung Task)有时很难将焦点从一个 JFrame 切换到另一个,而不是将 JFrame 移动到 Front () ...

于 2011-10-07T14:39:56.927 回答