【问题标题】:how to ensure that JDialog always stays on top如何确保 JDialog 始终保持在最前面
【发布时间】:2011-02-07 14:07:49
【问题描述】:

我有一个JDialog,它从用户那里获取名字。 JDialog 后面是一个小程序。我不希望用户在输入名称之前访问该小程序。我试过JDialog.setAlwaysOnTop(true),但小程序抛出AccessException 错误。所以我所做的是保持一个while循环,它将执行JDialog.setVisible(true),直到JtextField(用户名输入)为空(“”)。但是由于某种原因,这工作起来很慢,这意味着 JDialog 加载,但需要时间来关注 JTextField,即使用户输入他的名字,它也真的很慢......就像一个字符在 2 秒内。 ..我有没有其他方法可以强制用户在访问小程序之前输入名称?

【问题讨论】:

    标签: java visibility jdialog


    【解决方案1】:

    它运行缓慢是因为程序正在处理那个 foo 循环

    您可以做的是添加一个窗口侦听器,然后 jdialog 失去它的焦点(或 applet 获得它)将焦点返回给 jdialog。

    这应该比你现在使用的 for 循环执行得更好

    【讨论】:

    • 如果 ModalityTypes 适用于小程序,我建议改为。不过,我没有时间去了解。
    • 我在 JDialog 中添加了一个 FocusListener,并在其中编写了 focusLost() 函数的主体。但是,它似乎不起作用。如果用户在 JDialog 之外单击,它不会再次显示。我认为在 JDialog 外部单击不会导致 JDialog 失去焦点,它只是被隐藏了。
    【解决方案2】:

    使用模态 JDialog。例如,JApplet 的 init(...) 方法中的代码可能包括:

    JDialog dialog = new JDialog(SwingUtilities.windowForComponent(this));
    dialog.setModal(true);
    dialog.setSize(...);
    dialog.setVisible( true );
    

    或者您可以只使用 JOptionPane.showInputDialog()。同样,您只需将“this”指定为选项窗格的父组件。

    【讨论】:

    • 正是我想要的。谢谢。
    • 但是有一个问题。 ActionListeners 不再响应。此外,用户可以关闭对话框(对话框右上角有一个 x)。用户输入名称后我需要恢复什么吗?
    • 如果您不希望用户能够关闭对话框,请使用:dialog.setDefaultCloseOperation(...);
    【解决方案3】:

    另一种选择是:

    frame.setAlwaysOnTop(true);
    

    它将对话框强制置于任何其他对话框之上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      相关资源
      最近更新 更多