我需要实现一个例程,确保应用程序永远不会失去其他应用程序的焦点(但是,当它最小化时,我不应该强制它返回)。所以我决定在主窗口中实现WindowFocusListener:
public class DialogoPrincipal extends JFrame implements WindowFocusListener {
public DialogoPrincipal() {
initComponents();
this.addWindowFocusListener(this);
}
@Override
public void windowGainedFocus(WindowEvent e) {
//Do nothing
}
@Override
public void windowLostFocus(WindowEvent e) {
this.toFront();
}
/*hidden code*/
}
当主窗口不显示任何子窗口时它效果很好。但是当打开一些子窗口时,我无法强制应用程序的焦点。 有没有办法可以强制应用程序获得焦点,即使应用程序有子窗口,或者我需要在所有对话框中实现 WindowFocusListener? 如果我需要实现这个接口(interface),我该怎么做才能让 JOptionPane.showMessageDialog(...) 不失去焦点?
最佳答案
无法维护Focus, FocusRecycle, FocusSubSystem, ZOrder betweens JFrames正确地,肮脏的黑客必须将
JFrames
添加到two_dimmensional array
,这是供应FocusWhatever
并具有正确的排序
FocusWhatever
是简单的异步
,因为基于来自native 操作系统
的属性,必须延迟FocusWhatever
里面invokeLater
,Dialog Focus (AncestorListener) by @camickr (have to hold ancesors in Array) 的逻辑对于正确的容器层次结构
JFrame
和JDialog
可能很有用
使用JDialog with Parent and proper ModalityType ,然后
焦点
可以返回到Parent
关于java - 即使应用程序有子窗口也能保持焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14157665/