Закрытие JFrame нажатием кнопки

У меня есть частный член JFrame jButton1, и я хотел закрыть фрейм при нажатии кнопки.

jButton1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e)
    {
    }
});

Хотел сделать super.close(), но близко к супер не нашел. Есть ли способ сослаться на JFrame


person Mohit BAnsal    schedule 28.02.2010    source источник


Ответы (5)


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

jButton1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e)
    {
       frameToClose.dispose();
    }
});
person Anton    schedule 28.02.2010
comment
хотя это правда, вы пропускаете все EventListeners, связанные с событием закрытия, когда вы делаете это таким образом ... - person Vogel612; 27.08.2014
comment
Как избавиться от этого (текущего) JFrame ??? - person Tsakiroglou Fotis; 17.03.2017
comment
Что, если я просто хочу закрыть фрейм, но не убивать событие? - person Srijan Chaudhary; 26.09.2018

Мне кажется, у вас здесь две проблемы. Во-первых, JFrame не имеет метода close, который был рассмотрен в других ответах.

Во-вторых, у вас возникли проблемы со ссылкой на JFrame. Внутри actionPerformed super относится к ActionListener. Чтобы сослаться на экземпляр JFrame там, используйте вместо этого MyExtendedJFrame.super (вы также должны иметь возможность использовать MyExtendedJFrame.this, поскольку я не вижу причин, по которым вы хотите переопределить поведение dispose или setVisible).

person lins314159    schedule 28.02.2010

Вы можете использовать метод super.dispose (), который больше похож на операцию закрытия.

person Shriji Infotech    schedule 25.03.2012
comment
спасибо за попытку быть полезным :-) К сожалению, ваш ответ не добавляет много полезности в той степени, в которой он ошибочен (super слушателя не имеет dispose, нет необходимости вызывать super кадра, см. @ lins314159 для получения полной информации) - person kleopatra; 26.03.2012

Вы используете метод setVisible () JFrame (и установите видимость false) или метод dispose (), который больше похож на операцию close.

person Roman    schedule 28.02.2010
comment
setVisible () у меня не работает. Я также подумал, что могу закрыть приложение, установив видимость = false ... я использовал System.out (0); метод. он работает .. метод dispose () тоже работает. - person Kavindu Gayantha; 05.05.2019

person    schedule
comment
Отлично подходит для приложений с одним окном, но если вы используете это, чтобы закрыть одно окно, оно закроет и все остальные ... - person geisterfurz007; 20.10.2016
comment
@acp я хочу закрыть только тот же класс, а не предыдущий класс в java swing - person Ashish Shahi; 20.07.2017
comment
System.exit (0); метод работает .. а также dispose (); метод тоже хорошо. - person Kavindu Gayantha; 05.05.2019
comment
Я не думаю, что использование System :: exit - хорошая идея, поскольку вызов System.exit () завершает работу всей JVM. - person timlg07; 02.07.2020