好的,我找到了一个解决方案(不知道这是否是THE解决方案,但是它正在工作,所以…)
我发现了setFocusableWindowState(),它非常适合工具栏。顺便说一句,我不知道我以前的setFocusable(false)是否有任何作用。
下一个问题是此代码使焦点变得非常奇怪:如果我从MyApp切换到Firefox,则会发生以下情况:
focus : MyApp -> Firefoxexecution of MyDialog.toFront()focus : Firefox -> MyDialogMyDialog not focusable !focus : MyDialog -> MyApp !!!
结果:什么都没有改变!
因此,我终于有了窍门:在MyDialog.toFront()之后,您将焦点返回给了先前的所有者。我发现没有错误的唯一方法是:mainframe.toBack()
最终代码:
public class Test { private static Jframe mainframe; public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { mainframe = new Jframe("test"); mainframe.setSize(800,600); mainframe.setDefaultCloseOperation(Jframe.DISPOSE_ON_CLOSE); mainframe.setVisible(true); A a = new A(); } }); } public static class A extends JDialog { public A() { super(mainframe); setAlwaysonTop(true); setFocusableWindowState(false); setSize(80,60); setVisible(true); mainframe.addWindowListener(new WindowAdapter() { @Override public void windowActivated(WindowEvent e) { A.this.setAlwaysonTop(true); A.this.toFront(); } @Override public void windowDeactivated(WindowEvent e) { A.this.setAlwaysonTop(false); } }); } }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)