如何确保JDialog始终保持领先地位

时间:2010-04-13 18:13:58

标签: java visibility jdialog

我有一个JDialog来自用户的名字。 JDialog后面是一个小程序。我不希望用户在输入名称之前访问该applet。我尝试了JDialog.setAlwaysOnTop(true),但applet引发了AccessException错误。所以我所做的是保持一个执行JDialog.setVisible(true)的while循环,直到JtextField(用户名的输入)为空(“”)。但由于某种原因,这种方法效果很慢,意味着JDialog加载,但是需要时间来关注JTextField,即使用户输入他的名字,它也会非常慢......就像一个角色一样在2秒内......在访问applet之前,有没有其他方法可以强制用户输入名称?

3 个答案:

答案 0 :(得分:10)

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

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

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

答案 1 :(得分:1)

另一种选择是:

frame.setAlwaysOnTop(true);

它强制对话框在任何其他对话之上。

答案 2 :(得分:0)

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

你可以做的是添加一个窗口监听器,然后jdialog丢失它的焦点(或小程序获得它)将焦点返回到jdialog。

这应该比你现在使用的for循环好得多