как убедиться, что JDialog всегда остается на вершине - PullRequest
6 голосов
/ 13 апреля 2010

У меня есть JDialog, который берет имя от пользователя. За JDialog стоит апплет. Я не хочу, чтобы пользователь получил доступ к этому апплету, пока он не введет имя. Я пробовал JDialog.setAlwaysOnTop(true), но апплет выдает ошибку AccessException. Поэтому я продолжал цикл while, который будет выполнять JDialog.setVisible(true) до тех пор, пока JtextField (ввод имени пользователя) не станет пустым (""). Но по какой-то причине это работает очень медленно, то есть загружается JDialog, но требуется время, чтобы сосредоточиться на JTextField, и даже когда пользователь вводит свое имя, это происходит очень медленно ... как один символ за 2 секунды. .. Есть ли другой способ заставить пользователя ввести имя перед доступом к апплету?

Ответы [ 3 ]

10 голосов
/ 13 апреля 2010

Используйте модальный JDialog. Например, код в вашем методе init (...) JApplet может включать:

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

Или вы можете просто использовать JOptionPane.showInputDialog (). Опять же, вы просто указали бы "this" как родительский компонент панели параметров.

1 голос
/ 07 апреля 2014

Другой вариант будет:

frame.setAlwaysOnTop(true);

Вызывает диалог поверх любого другого.

0 голосов
/ 13 апреля 2010

Работает медленно, потому что программа обрабатывает этот цикл foo

Что вы можете сделать, это добавить прослушиватель окна, и тогда jdialog потерял свой фокус (или его получил апплет), вернув фокус на jdialog.

Это должно работать намного лучше, чем цикл for, который вы используете сейчас

...