WindowListener не работает, так как я переопределяю функцию - PullRequest
0 голосов
/ 22 мая 2019

Я пишу графический интерфейс.Я хочу напечатать что-нибудь после закрытия.Но WindowListener не работает.Я пишу окно, затем я хочу иметь boolean, чтобы отметить, что окна закрыты.Поэтому после того, как я смогу использовать это boolean в предложении if для записи следующего оператора, который должен быть выполнен после закрытия окон.

public class MyFrame extends JFrame implements  WindowListener {

    private boolean close=false;

    MyFrame() {
        this.close=false;
        setSize(300,250);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        addWindowListener(this);
           // after help, I've added addWindowListener although still don't 
            //work

    }

    public void windowOpened()/windowIconified()/windowDeiconified()...
    public void windowClosing(WindowEvent e) {close=true;}
    public void windowClosed(WindowEvent e) {close=true;}
}

public class MyFrameControl {
    MyFrame setframe() {
        MyFrame fr = new MyFrame();
        fr.setVisible(true);
        return fr;
    }
}

public class test {
    public static void main(String args[]) {
        MyFrameControl frameCtrl= new MyFrameControl();
        MyFrame tmpFrame = frameCtrl.setframe(); 

        if(tmpFrame.close==true) {
            System.out.println("close is true");
        }
    }
}

Когда я закрываюJFrame / MyFrame, не должен ли логический close быть true при выполнении строки печати?Все еще не может работать под JFrame после добавления addWindowListener, есть ли какое-либо решение под JFrame, кроме переключения на JDialogue?

1 Ответ

0 голосов
/ 22 мая 2019

Нет.

Ваш код не ожидает повторного закрытия JFrame и, как уже упоминалось @Abra, вы никогда не добавите WindowListener к JFrame.

Ваш k.setVisible(true) немедленно возвращается, и ваш кадр остается видимым.

То есть windowClosing() / windowClosed() не вызывается во время проверки состояния.

Возможно, вы могли бы преобразовать свой JFrame в JDialog, который можно установить в modal (setModal() / setModalityType()). Модальное диалоговое окно setVisible() возвращается после закрытия диалогового окна.

Чтобы смоделировать это с JFrame, вам нужно как-то дождаться закрытия. Вы можете поместить ваш System.out... в поток (Runnable), который ожидает до close==true.

A JFrame не является модальным по определению ( Как создать JFrame-модал в Swing Java )

...