【发布时间】:2016-12-13 13:12:23
【问题描述】:
我有一个程序应该在之前失去对其他应用程序的关注后被激活时发出一些动作。我写了一个 Focus-Listener 来实现这一点:
frame.addWindowFocusListener(new WindowFocusListener() {
@Override
public void windowGainedFocus(WindowEvent e) {
<do something when we gain focus>
}
@Override
public void windowLostFocus(WindowEvent e) {
<do something else when we lose focus>
}
});
问题是,当模式对话框(例如身份验证对话框)关闭时也会调用 gain-focus-action - 主窗口再次获得焦点。所以我需要以某种方式检测我是从我的程序内部还是从外部获得焦点。或者,换句话说,焦点操作不应该位于主窗口上,而应该位于应用程序本身上。有什么简单的方法可以做到这一点?
【问题讨论】:
-
请see my question about了解更多...
-
“我有一个程序应该发出一些动作..” 什么(特别)?见What is the XY problem?
-
By "reload data" DYM "update / refresh data" 因为如果不是,你的意思实际上是 "reload data" 那么更好的策略是首先不要丢失数据。 “这有关系吗?” 如果您对实现应用程序的最佳方式有完全错误的理解,这可能。这个请求有那种“难闻的气味”。
-
使用这个
e.getOppositeWindow()==theDialogYouWantToIgnore如果前一个窗口是那个对话框,则忽略焦点获得事件 -
好的..但是。假设我有一个应用程序。显示仅占屏幕 1/3 的股票价格。在屏幕另一部分的文字处理程序中处理另一个文档时,我可能会打开它。文字处理程序有重点,但我仍然希望股票价格程序能够更新。我不能肯定地说您的用户会或不会想要该应用程序。在这种情况下刷新数据,但他们可能更喜欢它仅在最小化或明确命令它“暂停”时“休息”更新数据。