我有一个swing应用程序,基本上是一个可以弹出模态对话框的主框架。
当模式对话框显示时,如果我切换到另一个窗口,如firefox。然后切换回swing应用程序。 JDialog
不在前面了。
我不想将对话框AlwaysOnTop设置为true。因为那时对话框将在所有窗口的顶部包括其他过程中的窗口。
那么我该怎么办呢?当我回过头来时,模态对话框还在上面?
BTW:它是一个Applet,所以主框架实际上是这样设置的:
private static Frame findParentFrame(Container owner){
Container c = owner;
while(c != null){
if (c instanceof Frame)
return (Frame)c;
c = c.getParent();
}
return (Frame)null;
}
答案 0 :(得分:2)
确保JDialog
实际上是模态的。同时尝试将主框架设置为所有者。
答案 1 :(得分:1)
我不确定对话框的形式是否是关键问题。我测试了这种行为,当应用程序最大化时,对话框总是在前面弹出,而不管它是模态的。
import java.awt.event.ActionEvent;
import javax.swing.JApplet;
import javax.swing.SwingUtilities;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
public class AppletTest extends JApplet
implements ActionListener
{
private static final long serialVersionUID = 1L;
private Frame findParentFrame()
{
Container c = this;
while(c != null)
{
if(c instanceof Frame)
return (Frame) c;
c = c.getParent();
}
return (Frame) null;
}
private void createGUI()
{
Container content = getContentPane();
content.setBackground(Color.white);
content.setLayout(new FlowLayout());
content.add(new JButton("Button 1"));
content.add(new JButton("Button 2"));
content.add(new JButton("Button 3"));
JDialog d = new JDialog(findParentFrame());
d.setModal(true);
d.setVisible(true);
}
public void init()
{
try
{
SwingUtilities.invokeAndWait(new Runnable()
{
public void run()
{
createGUI();
}
});
}catch(Exception e)
{
System.err.println("createGUI didn't successfully complete");
}
}
@Override
public void actionPerformed(ActionEvent e)
{
}
}
查看我提供的示例。您可以使用d.setModal(true);
对该行进行评论,结果将完全相同。
我建议您再次检查您的代码或向我们展示,因为您似乎可能错过了那些东西。
PS:我在网上发现了一些其他类似黑客的解决方案http://www.codeguru.com/forum/showthread.php?t=41536 我仍然会专注于检查你的代码。
Oi&祝你好运,博罗。
答案 2 :(得分:0)
我认为你所要求的是一个对象是Java应用程序/框架的模态,它是它的父级。当父级重新获得焦点时,您可以使用Toolkit.getDefaultToolkit()。getSystemEventQueue()。 postEvent(AWTEvent e)向对话框发出一个事件,使其弹回到顶部。
答案 3 :(得分:0)
感谢Boro link!
我有同样的问题需要解决。带有swing applet的浏览器。对话框弹出,我点击浏览器,点击返回对话框,对话框消失在浏览器后面。我尝试了一切,但只有一件事有所帮助:
将WindowListener
添加到Dialog
并致电聆听者toFront()
中的windowDeactivated()
。