如何将窗户带到前面?
我们有一个Java应用程序,当远程控制机制激活应用程序中的某些内容时,需要将其置于前台。
为了得到这个,我们已经在类的被调用方法中实现了,它表示我们应用程序的框架(a的扩展)的以下实现:JFrame
setVisible(true);
toFront();
在Windows XP下,这在第一次调用时起作用,在第二次只有任务栏中的选项卡闪烁时,帧不再出现在前面。Win2k也是如此。在Vista上,它似乎工作正常。
你有什么想法吗?
我们有一个Java应用程序,当远程控制机制激活应用程序中的某些内容时,需要将其置于前台。
为了得到这个,我们已经在类的被调用方法中实现了,它表示我们应用程序的框架(a的扩展)的以下实现:JFrame
setVisible(true);
toFront();
在Windows XP下,这在第一次调用时起作用,在第二次只有任务栏中的选项卡闪烁时,帧不再出现在前面。Win2k也是如此。在Vista上,它似乎工作正常。
你有什么想法吗?
一个可能的解决方案是:
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
myFrame.toFront();
myFrame.repaint();
}
});
我在Ubuntu(Java 1.6.0_10)下将a带到前面时遇到了同样的问题。我能解决它的唯一方法是提供一个.具体来说,我必须将 my 设置为在调用时始终保持在顶部,并向 .JFrame
WindowListener
JFrame
toFront()
windowDeactivated
setAlwaysOnTop(false)
因此,这是可以放入基的代码,用于派生所有应用程序框架。JFrame
@Override
public void setVisible(final boolean visible) {
// make sure that frame is marked as not disposed if it is asked to be visible
if (visible) {
setDisposed(false);
}
// let's handle visibility...
if (!visible || !isVisible()) { // have to check this condition simply because super.setVisible(true) invokes toFront if frame was already visible
super.setVisible(visible);
}
// ...and bring frame to the front.. in a strange and weird way
if (visible) {
toFront();
}
}
@Override
public void toFront() {
super.setVisible(true);
int state = super.getExtendedState();
state &= ~JFrame.ICONIFIED;
super.setExtendedState(state);
super.setAlwaysOnTop(true);
super.toFront();
super.requestFocus();
super.setAlwaysOnTop(false);
}
每当您的框架应该显示或带到前面呼叫。frame.setVisible(true)
自从我迁移到Ubuntu 9.04以来,似乎没有必要使用一个 for invoke - 可以看出;此代码已移至方法和 。WindowListener
super.setAlwaysOnTop(false)
toFront()
setVisible()
请注意,应始终在 EDT 上调用方法。setVisible()