(Java Swing) Задержка действия actionPerformed до возврата диалога

1

Мне нужно создать JDialog или класс JFrame (это не имеет особого значения до тех пор, пока это графический интерфейс), который может быть использован в статической команде, вызываемой из обработчика actionPerformed (ActionEvent) и останавливается этот процесс до тех пор, пока пользователь не предоставит свой выбор из пользовательского интерфейса.

Очевидно, это возможно, потому что это именно то, что создает диалоги JOptionPane. Но когда я пытаюсь приостановить поток до тех пор, пока пользователь не завершит процесс выбора, интерфейс не будет отображаться должным образом.

Вот часть моего кода, с которой у меня возникают проблемы:

public static Results queryForResults(String message, int propertyOne, 
      int propertyTwo){

    MyCustomDialog mcd = new MyCustomDialog(message, propertyOne,propertyTwo);
    mcd.show();
    // complete() is a boolean property of my MyCustomDialog class that turns
    // true when the interface has been completed.
    while(!mcd.complete()){
        synchronized(mcd){
            try{
                mcd.wait(10000L);
            } catch(InterruptedException e) {
                e.printStackTrace();
                return null;
            }
        }
    }
    mcd.dispose();
    // My MyCustomDialog class has a getResults() property which returns
    // a Results object (i.e. another custom class I've made to contain
    // the selections made by the user.)
    return mcd.getResults();
}

Появится внешний внешний диалог, но он не поддерживает. Кажется, что они выглядят как экранный захват того, что было на экране под диалогом, когда он появился. У меня создается впечатление, что это не работает, потому что я не должен останавливать поток Swing Event командой wait. Итак, как вы это делаете?

Теги:
swing
events
dialog

1 ответ

2
Лучший ответ

Нет необходимости в цикле while. modal JDialog заставит выполнение останавливаться в вашем ActionLIstener, пока диалог не будет закрыт.

Кроме того, не используйте метод show() для отображения диалогового окна. Вы должны использовать метод setVisible(true).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню