空的JFrame显示在屏幕上

3
我目前使用 JOptionPane 弹出消息并向用户显示。该消息不总是在其他窗口的顶部,因此我将其放在一个虚拟的 JFrame (errorFrame) 中,并设置 errorFrame 始终置顶。这样可以使 errorFrame 始终保持在最上层,但会在屏幕右上角创建第二个空白框架。选项面板出现在 100,100 的位置,就像我设置包含它的虚拟框架的位置一样。为什么会创建第二个框架?感谢所有的帮助。
更新:我从这篇文章中得到了将 JOptionPane 放入 JFrame 的想法:JOptionPane won't show its dialog on top of other windows
try {
    JFrame errorFrame = new JFrame();
    errorFrame.setVisible(true);
    errorFrame.setAlwaysOnTop(true);
    if (true) {
        JOptionPane.showMessageDialog(errorFrame,
              "blah blah",
              "blahblahblah",
              JOptionPane.WARNING_MESSAGE);

        return true;
    }
    errorFrame.dispose();
}

作为一个临时解决方案,我将setVisible设置为false,并将setDefaultCloseOperation设置为JFrame.DISPOSE_ON_CLOSE。然而,这似乎是一种不好的做法,因为我创建了一个不可见、未使用的JFrame。 - GregH
你想发生什么?只有JFrame和JOptionPane吗? - Kebab Programmer
请在您的问题中发布您的工作代码的屏幕截图。 - Kebab Programmer
你所描述的问题实际上是你的操作系统出了问题,我知道这很烦人 :P - MadProgrammer
“消息并不总是在其他窗口的顶部。” 选项面板的父组件是什么? 1)为了更快地获得更好的帮助,请发布[MCVE]或简短,自包含,正确的示例。2)请参阅使用多个JFrames,好/坏实践? - Andrew Thompson
2个回答

1

不要创建虚拟框架,而是将父框架暂时置于顶部

JFrame frame = new JFrame("Parent");
if(test condition){
    frame.setAlwaysOnTop(true);
    int choice = JOptionPane.showMessageDialog(frame,
    "blah blah","blahblahblah",JOptionPane.WARNING_MESSAGE);
    if(choice!=null)
    frame.setAlwaysOnTop(true);
}

0
尝试在dispose()之后调用setVisible(),交换它们的顺序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接