Предотвращение ненужных дубликатов диалогов в Java Swing - PullRequest
1 голос
/ 19 января 2010

Существует ли в классе JDialog способ предотвращения отображения дочернего окна (JDialog) более одного раза, когда кнопка из главного окна (JFrame), используемая для его открытия, нажималась несколько раз? Большое спасибо заранее!

Ответы [ 3 ]

2 голосов
/ 19 января 2010

Да, и вам не нужно делать окно модальным, чтобы сделать это (хотя сделать его модальным было бы проще всего).

Просто сделайте что-то вроде следующего

В ваших членских делках:

private final MyDialog dialog = new MyDialog();

В вашем коде:

private void showDialog() {
   dialog.setVisible(true);
   dialog.requestFocus(); // May be needed to bring window to front
}

Это позволит вам создать экземпляр только один раз. Просто вызывайте showDialog () при каждом нажатии кнопки.

1 голос
/ 19 января 2010

Еще один способ, который я делал в прошлом с Swing, заключается в том, что при нажатии кнопки первое, что я делаю, это отключаю кнопку. Затем я использую наблюдаемый шаблон, чтобы посмотреть на дочернее окно и повторно включить кнопку, когда дочернее окно закрыто. Таким образом, если по какой-то причине для отображения дочернего окна требуется некоторое время, пользователь не может щелкнуть по нему несколько раз и все испортить.

0 голосов
/ 19 января 2010

Вы можете сделать модальным JDialog, тогда родительское окно не будет реагировать, пока оно не будет закрыто.

Или вы можете инициализировать JDialog раньше и просто сделать его видимым при нажатии вашей кнопки. Если сделать его видимым дважды, он не отобразится дважды.

...