Ошибка при выходе из окна Jframe

1

У меня есть одно окно класса Jframe и оно содержит одну кнопку. При нажатии этой кнопки открывается второе окно класса Jframe. При нажатии кнопки закрытия или выхода второго окна первое окно также закрывается вместе со вторым окном. Почему это происходит?

ниже мой код://это мой первый файл

class Frame1 extends JFrame
{
Frame1()
{
        super("hello this is window 1");
        setVisible(true);
        setSize(400,400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout());
        JButton btn = new JButton("open second window");
       btn.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
                System.out.println("button clicked");
                Frame2 obj2 = new Frame2();
        }
    });
    add(btn);
}

public static void main(String args[])
{
        Frame1 obj = new Frame1();
}
}

// this is my second file
class Frame2 extends JFrame
{
Frame2()
{
        super("hello this is window 2");
        setVisible(true);
        setSize(400,400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout());
}
}
Теги:
swing
jframe

4 ответа

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

Попробуйте добавить слушателя окна во второй кадр, а затем просто утилизируйте его, например:

frame2.addWindowListener(new java.awt.event.WindowAdapter() {
    @Override
    public void windowClosing(java.awt.event.WindowEvent windowEvent) {
        frame2.dispose();
    }
});

OR

frame2.setDefaultCloseOperation (JFrame.DISPOSE_ON_CLOSE);

Но обратите внимание, что не очень хорошая практика использования нескольких приложений JFrame's в вашем приложении, используйте один JFrame и несколько Dialogs.

  • 0
    спасибо дружище, все работает нормально.
  • 0
    Пожалуйста :)
2

Попробуйте изменить событие закрытия по умолчанию (которое выйдет из программы), а затем закройте этот JFrame явно.

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));

Некоторые ссылки, которые могут помочь:

http://tips4java.wordpress.com/2009/05/01/closing-an-application/
http://docs.oracle.com/javase/tutorial/uiswing/events/windowlistener.html
qaru.site/questions/31366/...

1

Удалите эту строку из класса Frame2

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Затем добавьте это в ту же строку:

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
1

Измените значение параметра setDefaultCloseOperation() на JFrame.DO_NOTHING_ON_CLOSE, чтобы второй кадр не закрыл первый кадр

  • 0
    все еще это не работает.

Ещё вопросы

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