Java программно закрыть окно

Java программно закрыть окно

Здравствуйте!
как закрыть JFrame или JDialog . есть jDialog на нем кнопочка. очень нужно научится закрывать окно не по крестику а по этой кнопочке.
Зарание спасибо!

Здравствуйте, a_g_barnaul, Вы писали:

__>Здравствуйте!
__>как закрыть JFrame или JDialog . есть jDialog на нем кнопочка. очень нужно научится закрывать окно не по крестику а по этой кнопочке.
__>Зарание спасибо!

 JButton closeButton = new JButton ("Закрыть"); . closeButton.addActionListener (new ActionListener () < public void actionPerformed (ActionEvent e) < dispose (); >>); . 
F> JButton closeButton = new JButton ("Закрыть"); F> . F> closeButton.addActionListener (new ActionListener () < F>public void actionPerformed (ActionEvent e) < F>dispose (); F> > F> >); F> . F>

Я предпочитаю делать немного по-другому

package closebutton; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Frame extends JFrame < JPanel contentPane; JButton buttonClose = new JButton("Close Button"); BorderLayout borderLayout=new BorderLayout(); public Frame() < super(); contentPane = (JPanel)getContentPane(); contentPane.setLayout(borderLayout); contentPane.add(buttonClose,BorderLayout.SOUTH); buttonClose.addActionListener(new ActionListener() < public void actionPerformed(ActionEvent e) < closeFrame(e); >>); this.addWindowListener(new WindowAdapter() < public void windowClosing(WindowEvent e) < closingFrame(e); >>); setTitle("Frame"); setSize(new Dimension(400, 300)); setVisible(true); > public void closeFrame(ActionEvent e) < processWindowEvent(new WindowEvent(this,WindowEvent.WINDOW_CLOSING)); > public void closingFrame(WindowEvent e) < if (e.getID()==WindowEvent.WINDOW_CLOSING) < this.dispose(); > > public static void main(String[] args) < new Frame(); > >

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

Читайте также:  Desktop application in java with database

Источник

Как программно закрыть JFrame

Какой правильный способ закрыть JFrame , как если бы пользователь нажал кнопку закрытия X или нажал Alt + F4 (в Windows)? У меня есть операция закрытия по умолчанию, установленная так, как я хочу, через:

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

Он делает именно то, что я хочу, с вышеупомянутыми элементами управления. Этот вопрос не об этом. То, что я действительно хочу сделать, — это заставить графический интерфейс вести себя так же, как нажатие кнопки закрытия X приведет к его поведению. Предположим, что я должен расширить WindowAdaptor , а затем добавить экземпляр моего адаптера в качестве слушателя через addWindowListener() . Я хотел бы видеть ту же последовательность вызовов через windowDeactivated() , windowClosing() и windowClosed() , что и при нажатии кнопки закрытия X . Не так много разрывает окно, как говорится, чтобы оно так рвало.

Да, хороший вопрос, я хочу, чтобы пользователь щелкнул по кнопке [x], которую я явно предоставляю для недокументированного переопределения JFrame, чтобы он действовал точно так же, как если бы пользователь щелкнул по кнопке [x], предоставленной операционной системой, в окне JFrame, оформленном для конкретной ОС.

Как насчет this.dispatchEvent (wev); вместо Toolkit.getDefaultToolkit . Первое, что предлагает принятый ответ.

18 ответов

Если вы хотите, чтобы графический интерфейс работал так, как будто вы нажали кнопку закрытия X , вам нужно отправить событие закрытия окна в Window . ExitAction из Закрытие приложения позволяет вам добавить эту функциональность в элемент меню или любой компонент, который легко использует Action .

frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING)); 

Нужно ли добавлять this.jframe.addWindowListener (new WindowAdapter () <@Override public void windowClosing (WindowEvent e) >); до вызова этого? Или он тоже закроет окно?

вопрос был о том, как закрыть рамку, поэтому в этом принятом ответе отсутствует эта часть. Этот ответ просто вызывает потенциального слушателя, но ничего не говорит о его необходимости для адекватного ответа на этот вопрос. Msgstr «Если вы хотите, чтобы GUI вел себя так, как будто вы нажали X закрыть». Нет, не будет, если у вас нет слушателя, который также располагает кадром.

«Как программно закрыть JFrame» — если JFrame.EXIT_ON_CLOSE не установлен, он не закроется. В любом случае, я просто указывал, что это может быть необходимо добавить в ответ, так как jframe.setDefaultCloseOperation (WindowConstants.DO_NOTHING_ON_CLOSE); фактически не закроет его, вызвав это событие, несмотря на то, что пользователь обычно может закрыть окно на X, даже если задано DO_NOTHING_ON_CLOSE, но запуск этого события не будет. Увидеть разницу?

@momomo momomo, не нужно было ничего указывать. Этот ответ будет делать именно так, как спросил ОП. Он будет делать то, что делает кнопка закрытия «X». Название вопроса не является вопросом. ОП специально заявил, что операция закрытия по умолчанию была установлена на «выход», поэтому то, что делает «ничего не делать», не имеет значения, так как ОП не спрашивал об этом. Пожалуйста, удалите все свои комментарии, чтобы не путать других людей, читающих этот ответ, поскольку был дан ответ, чтобы напрямую ответить на вопрос ОП, а не ваша интерпретация заголовка вопроса.

setVisible(false); //you can't see me! dispose(); //Destroy the JFrame object 

Нет, если операция закрытия по умолчанию включена в EXIT_ON_CLOSE или слушатель кнопки выполняет любое необходимое закрытие ресурса.

Если по Alt-F4 или X вы имеете в виду «Немедленно выйти из приложения без учета того, для чего работают другие Windows или потоки», то System.exit(. ) будет делать именно то, что вы хотите, в очень резкой, грубой силе и, возможно, проблематичным способом.

Если по Alt-F4 или X вы хотите скрыть окно, тогда frame.setVisible(false) — это то, как вы «закрываете» окно. Окно будет продолжать потреблять ресурсы/память, но может быть сделано видимым снова очень быстро.

Если по Alt-F4 или X вы хотите скрыть окно и избавиться от любых ресурсов, которые он потребляет, тогда frame.dispose() — это то, как вы «закрываете» окно. Если кадр был последним видимым окном, и нет других потоков не-daemon, программа завершит работу. Если вы снова откроете окно, ему придется снова инициализировать все собственные ресурсы (графический буфер, дескрипторы окон и т.д.).

dispose() может быть ближе всего к поведению, которое вы действительно хотите. Если в вашем приложении открыто несколько окон, вы хотите, чтобы Alt-F4 или X покинули приложение или просто закрыли активное окно?

Если вы сделали это, чтобы убедиться, что пользователь не может закрыть окно:

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 

Затем вы должны изменить свой pullThePlug() метод

Я нашел, что это единственный способ, который отлично сочетается с WindowListener и JFrame.DO_NOTHING_ON_CLOSE .

Выход из запущенного Java процесса очень прост, в основном вам нужно сделать только две простые вещи:

  • вызов java-метода System.exit(. ) в точке завершения приложения. Например, если ваше приложение основано на фреймах, вы можете добавить listener WindowAdapter и вызвать System.exit(. ) внутри своего окна методаClosing (WindowEvent e).

Примечание: вы должны вызвать System.exit(. ), в противном случае ваша программа будет связана с ошибкой.

  1. Избегайте неожиданных исключений java, чтобы убедиться, что метод exit можно вызвать всегда. Если вы добавите System.exit(. ) в нужную точку, но это не значит, что метод можно вызывать всегда, потому что неожиданные исключения Java могут препятствовать вызову метода.

Это сильно связано с вашими навыками программирования.

** Ниже приведен простейший пример (основанный на JFrame), который показывает вам, как вызвать метод выхода

import java.awt.event.*; import javax.swing.*; public class ExitApp extends JFrame < public ExitApp() < addWindowListener(new WindowAdapter() < public void windowClosing(WindowEvent e) < dispose(); System.exit(0); //calling the method is a must >>); > public static void main(String[] args) < ExitApp app=new ExitApp(); app.setBounds(133,100,532,400); app.setVisible(true); >> 

Источник

Закрытие окна

При нажатии на кнопку «ОК» должно появиться JOptionPane, а само окно с кнопкой закрыться. Как реализовать это в обработчике. Кроме System.exit(0) ничего в голову не приходит, но такой вариант не подходит. Окно JFrame. Написано всё, кроме закрытия, но исходника сейчас у меня нет. Просто сделать окно невидимым тоже не срабатывает.

Закрытие окна
Есть два окна JFrame, как закрыть одно из них по кнопке? System.exit(0) закрывает оба окна

Закрытие предыдущего окна
Здравствуйте. Я хочу написать программу из нескольких окон. Возникла проблема: не получается.

Закрытие окна из MenuBar
Интересная задача закрыть fxml файл из MenuBar, интересна тем, что два вида закрытия, которые я.

Закрытие текущего окна
Есть массив из n окон , созданных динамически . В каждом окне будет поле для ввода и кнопка "Ok".

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
package tabledemo; import java.awt.FlowLayout; import java.awt.HeadlessException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; public class MainForm extends JFrame { public MainForm() throws HeadlessException { this.setSize(400, 300); this.setLayout(new FlowLayout()); this.setDefaultCloseOperation(EXIT_ON_CLOSE); JButton btnOk = new JButton("OK"); btnOk.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { MainForm.this.setVisible(false); int resDlg = JOptionPane.showConfirmDialog(null, "Exit ?","",JOptionPane.YES_NO_OPTION); if (resDlg == JOptionPane.YES_OPTION) { System.exit(0); }else{ MainForm.this.setVisible(true); } } }); this.add(btnOk); this.setVisible(true); } }

Источник

Как программно закрыть JFrame

Какой правильный способ получить JFrame закрыть, так же, как если бы пользователь нажал X Кнопка закрытия или нажата Alt + F4 (в Windows)?

Моя операция закрытия по умолчанию настроена так, как я хочу, через:

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

Это делает именно то, что я хочу с вышеупомянутыми элементами управления. Этот вопрос не об этом.

То, что я действительно хочу сделать, это заставить графический интерфейс вести себя так же, как нажатие X Кнопка закрытия заставит его вести себя.

Предположим, я должен был продлить WindowAdaptor а затем добавить экземпляр моего адаптера в качестве слушателя через addWindowListener() , Я хотел бы видеть ту же последовательность звонков через windowDeactivated() , windowClosing() , а также windowClosed() как будет происходить с X кнопка закрытия Не столько разорвать окно, сколько сказать, что оно себя разрывает, так сказать.

18 ответов

Если вы хотите, чтобы графический интерфейс вел себя так, как будто вы нажали X кнопку закрытия, то вам нужно отправить событие закрытия окна на Window , ExitAction из закрытия приложения позволяет добавить эту функцию в пункт меню или любой компонент, который использует Action легко.

frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING)); 
setVisible(false); //you can't see me! dispose(); //Destroy the JFrame object 

Если под Alt-F4 или X вы подразумеваете «Немедленно выйти из приложения, независимо от того, какие другие Windows или потоки работают», то System.exit(. ) будет делать то, что вы хотите, очень резким, грубым и, возможно, проблемным способом.

Если под Alt-F4 или X вы имеете в виду скрыть окно, то frame.setVisible(false) как вы «закрываете» окно Окно будет продолжать использовать ресурсы / память, но его можно будет снова быстро увидеть.

Если под Alt-F4 или X вы имеете в виду скрыть окно и утилизировать все ресурсы, которые оно потребляет, то frame.dispose() как вы «закрываете» окно Если кадр был последним видимым окном и не запущены другие потоки, не являющиеся демонами, программа завершится. Если вы снова откроете окно, ему придется заново инициализировать все собственные ресурсы (графический буфер, дескрипторы окон и т. Д.).

dispose() может быть ближе всего к поведению, которое вы действительно хотите. Если в вашем приложении открыто несколько окон, хотите ли вы, чтобы Alt-F4 или X закрыли приложение или просто закрыли активное окно?

Источник

Оцените статью