Сброс JDialog после закрытия

Я использую JDialog для получения платежной информации, paymentAmount и Date отправляются JTextfield и datechooser.beans.DateChooserCombo.

Когда пользователь закрывает JDialog или нажимает Cancel, JDialog закрывается. Но когда он нажимает кнопку «Оплата» и снова появляется JDialog, отображаются ранее отправленные входные данные.

Я хочу, чтобы JDialog было состоянием по умолчанию всякий раз, когда оно появляется. Есть ли способ сделать это по умолчанию, или мне нужно создать свой собственный метод сброса?


person Salih Erikci    schedule 15.06.2013    source источник


Ответы (2)


Когда вы закрываете диалог, он не уничтожается. Он просто станет невидимым, но в нем по-прежнему будет все, как было, когда он был закрыт.

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

 @Override
 public void setVisible(boolean bVisible)
 {
     if(bVisible == false)
     {
         super.setVisible(bVisible);
         return;
     }

     initMyValues();
     super.setVisible(bVisible);
     return;
 }

В качестве альтернативы вы можете создать WindowListener, а затем получать уведомления о различных изменениях состояния окна. Зависит от того, что лучше соответствует вашим потребностям. WindowListener не требует от вас создания отдельного класса, просто чтобы переопределить setVisible(), но вы должны добавить некоторые дополнительные функции, требуемые интерфейсом.

person Devolus    schedule 15.06.2013

Другим обходным путем было бы установить windowListener в ваш диалог.

myDialog.addWindowListener(new WindowListener() {
            /*Implements over methods here*/
            @Override
            public void windowClosing(WindowEvent e) {
                //set default values here
            }});
person Alexis C.    schedule 15.06.2013
comment
NetBeans автоматически генерирует такой код при создании нового JDialog (небольшое отличие: он регистрирует WindowAdapter вместо WindowListener). Не могли бы вы также вызвать dispose() в обработчике события кнопки «Платеж» после того, как закончите? Это было рекомендовано в аналогичном вопросе: stackoverflow.com/questions/7256606/ - person reggoodwin; 16.06.2013