【发布时间】:2011-08-10 12:34:27
【问题描述】:
我的代码包含一个 JFrame,在执行特定操作后,它会显示一个非模态 JDialog。用户应该将一个对象从 JFrame 拖到 JDialog 中。我遇到的问题只出现在 Solaris CDE(通用桌面环境)上:打开 JDialog 正确地将窗口定位在框架的顶部。用户单击框架后,对话框消失在其后面,迫使用户重新定位框架以将其放在 JDialog 旁边。 JDialog 的预期行为是保持在父框架的顶部。
下面的代码演示了这种情况:
public class MyFrame extends JFrame
{
public MyFrame()
{
JButton btn = new JButton("Push me");
btn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
JDialog dialog = new JDialog(MyFrame.this);
dialog.getContentPane().add(new JLabel("I'm a dialog!!!"));
dialog.setAlwaysOnTop(true);
dialog.setVisible(true);
}
});
getContentPane().add(btn);
pack();
}
public static void main(String args[])
{
MyFrame frame = new MyFrame();
frame.setVisible(true);
}
}
在 solaris 以及 windows 和 linux (GNOME) 上运行任何其他窗口管理器时不会出现此问题。前段时间有人问过类似的问题(How to make modeless dialog stay on top of its parent in Solaris CDE),但仍未解决。
【问题讨论】: