2010-04-13 1 views
6

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

ответ

10

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

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

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

+0

только то, что я искал. Благодарю. – mithun1538

+0

Но theres одна проблема. ActionListeners больше не отвечают. А также пользователь может закрыть диалоговое окно (в правом верхнем углу диалогового окна есть x). Есть ли что-нибудь, что мне нужно для восстановления после того, как пользователь ввел имя? – mithun1538

+0

Если вы не хотите, чтобы пользователь мог закрыть диалоговое окно, используйте: dialog.setDefaultCloseOperation (...); – camickr

0

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

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

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

+0

Если ModalityTypes работают для апплетов, я бы предложил это вместо этого. Однако у меня нет времени, чтобы узнать. –

+0

Я добавил FocusListener в JDialog и написал тело для функции focusLost(). Однако, похоже, он не работает. Если пользователь нажимает кнопку JDialog, он не отображается снова. Я думаю, что щелчок за пределами JDialog не приводит к тому, что JDialog теряет фокус, он просто скрывается. – mithun1538

+0

mmhhh, можете ли вы разместить образец кода? – OscarRyz

1

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

frame.setAlwaysOnTop(true); 

Это заставляет диалог поверх любого другого.