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

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

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

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


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


Ответы (5)


arrow_upward
43
arrow_downward

Вам понадобится ссылка на конкретный фрейм, который вы хотите закрыть, но при условии, что у вас есть ссылка, 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

arrow_upward
9
arrow_downward

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

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

person lins314159    schedule 28.02.2010

arrow_upward
4
arrow_downward

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

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

arrow_upward
2
arrow_downward

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

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

arrow_upward

arrow_downward

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