【问题标题】:Empty JFrame showing on screen屏幕上显示空的 JFrame
【发布时间】:2015-12-15 21:59:06
【问题描述】:

我目前正在使用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
  • 你想要发生什么?只是 JFrame 和 JOptionPane?
  • 在您的问题中发布您的工作代码的屏幕截图
  • 您似乎描述的问题实际上是您的操作系统的问题,我知道,烦人:P
  • “消息并不总是在其他窗口之上” 选项窗格的父组件是什么? 1) 为了尽快获得更好的帮助,请发布minimal reproducible exampleShort, Self Contained, Correct Example。 2) 见The Use of Multiple JFrames, Good/Bad Practice?

标签: java swing jframe


【解决方案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);
}

【讨论】:

    【解决方案2】:

    尝试将 setVisible() 放在 dispose() 之后,交换它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      • 2023-03-18
      • 2015-10-03
      • 2020-07-17
      相关资源
      最近更新 更多