【发布时间】:2011-10-21 12:40:26
【问题描述】:
给定以下小程序:
import java.awt.BorderLayout;
import java.awt.Rectangle;
import java.lang.reflect.InvocationTargetException;
import javax.swing.JApplet;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class Example extends JApplet
{
JPanel aPanel;
@Override
public void init()
{
try
{
javax.swing.SwingUtilities.invokeAndWait(new Runnable()
{
public void run()
{
makeGui();
}
});
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (InvocationTargetException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void makeGui()
{
aPanel = new JPanel(new BorderLayout());
this.getContentPane().add(aPanel, BorderLayout.CENTER);
JFrame aTestFrame =new JFrame();
aTestFrame.setBounds(new Rectangle(200,200));
JPanel aTestPanel = new JPanel(new BorderLayout());
aTestPanel.setBounds(new Rectangle(200,200));
aTestFrame.add(aTestPanel);
aTestFrame.setVisible(true);
JOptionPane.showMessageDialog(aTestFrame, "arfarf");
}
}
为什么 JOptionPane 调用会关闭 aTestFrame?如果我忽略调用,则 2 帧会正确渲染,但是当我在 JOptionPane 中单击“确定”时,父 JFrame 将关闭。
第一个答案是正确的,显然有一个焦点问题..谢谢!
【问题讨论】:
-
这不会发生在我的机器上(Java 6、Windows 7、Eclipse Indigo)。但是,当我在我的机器上单击“确定”时,Applet 窗口会获得焦点并遮挡 aFrame。
-
“第一个答案”——你的意思是我的答案还是 S.L.巴特的评论?你所说的“焦点问题”是什么意思,因为我认为它不是那种东西。您正在尝试从现有的顶级窗口打开第二个顶级窗口,并且应该为此使用 JDialog,以便这两个窗口相关,并且显示的 z 顺序是正确的。