无法使用默认帧将JOptionPane聚焦在前景上

时间:2011-10-28 11:53:33

标签: java swing focus awt

我的程序中有一段代码,我需要在其中显示错误消息。代码:

String ErrorMsg=" Error to be Diplayed ";
JOptionPane.showMessageDialog(null, ErrorMsg, "Failure", JOptionPane.ERROR_MESSAGE);

注意:使用默认帧。

消息已成功显示,但在按“OK”按钮确认之前,如果我尝试任何其他成功的流程,消息框控件将丢失,并且消息框将不会在前景中阻止,即使是连续的流程。

我希望消息框始终位于前台,直到用户按下“确定”按钮,而失去焦点并隐藏起来。怎么做?

4 个答案:

答案 0 :(得分:3)

如果您希望JOptionPane的行为与完整的GUI中的行为相同,那么首先要创建一个成熟的Swing GUI。忘记使用“默认”框架或任何你正在使用的框架(也许是控制台)。您需要GUI行为,因此要获得此功能,您必须通过在JFrame中显示应用程序并让JFrame启动JOptionPane来创建GUI。

答案 1 :(得分:2)

传递对父框架的引用而不是null(第一个参数)。

答案 2 :(得分:2)

  

我希望消息框始终位于前台,直到用户按下“确定”按钮,而失去焦点并隐藏起来。

使用JFrame和setAlwaysOnTop(true)。您需要显示自己的消息和按钮。

JOptionPane在幕后使用JDialog。 JDialog不支持此属性。

编辑:

要获取选项窗格使用的图标,您可以使用:

Icon icon = UIManager.getIcon("OptionPane.errorIcon");

有关其他图标的列表,请参阅:UIManager Defaults

答案 3 :(得分:2)

以下代码足以使JoptionPane消息的默认框架设置在最顶层。

        JDialog dialog = new JOptionPane("ErrorMsg",JOptionPane.ERROR_MESSAGE,JOptionPane.DEFAULT_OPTION).createDialog(" Failure"); 
        dialog.setAlwaysOnTop(true);
        dialog.setVisible(true);
        dialog.dispose();