Закройте один JFrame, не закрывая другого?

Я хочу отображать два (или более) JFrames одновременно.
Когда я закрываю один из них (используйте кнопку закрытия по умолчанию), остальные кадры должны быть видимыми.

Как я могу это сделать?

Если вы не хотите, чтобы ваше приложение завершалось, когда JFrame закрыто, используйте

 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE) 

вместо

 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

Из документации :

  • DO_NOTHING_ON_CLOSE (определяется в WindowConstants): ничего не делать; требуют, чтобы программа обрабатывала операцию в методе windowClosing зарегистрированного объекта WindowListener.
  • HIDE_ON_CLOSE (определяется в WindowConstants): автоматически скрыть кадр после вызова любых зарегистрированных объектов WindowListener.
  • DISPOSE_ON_CLOSE (определяется в WindowConstants): автоматически скрывать и удалять кадр после вызова любых зарегистрированных объектов WindowListener.
  • EXIT_ON_CLOSE (определяется в JFrame): выход из приложения с помощью метода выхода системы. Используйте это только в приложениях.

Это был мой ответ, прежде чем вопрос был уточнен, может быть полезным:

Вы можете использовать setVisible(false) на вашем JFrame если хотите снова отобразить тот же кадр.
В противном случае вызовите dispose() чтобы удалить все ресурсы собственного экрана .

Помогает ли вам это?

 import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingUtilities; public class TwoJFrames { public static void main(String[] args) { int nb = 4; if (args != null && args.length > 0) { nb = Integer.parseInt(args[0]); } final int frameCount = nb; SwingUtilities.invokeLater(new Runnable() { public void run() { for (int i = 0; i < frameCount; i++) { JFrame frame = new JFrame("Frame number " + i); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); JPanel p = new JPanel(new BorderLayout()); p.add(new JLabel("Click on the corner to close..."), BorderLayout.CENTER); frame.setContentPane(p); frame.setSize(200, 200); frame.setLocation(100 + 20 * i, 100 + 20 * i); frame.setVisible(true); } } }); } } 
  • JPanel и компоненты меняются автоматически
  • Поместите JTable в JTree
  • Javafx: Разница между javafx.concurent и Platform.runLater?
  • Почему он неодобрительно использует пустой макет в Swing?
  • Как обновить поле метки каждые 2 секунды в java fx?
  • Таймер Javax.swing повторяет штраф, но ActionListener ничего не делает
  • вызов java-метода для рисования графики
  • Java Swing Blank JFrame подходит?
  • Поворот изображения в java
  • Имея изображения в качестве фона JPanel
  • Трудности, связанные с пониманием механизма рендеринга JTable и JTree
  • Interesting Posts

    CryptographicException «Keyset не существует», но только через WCF

    Угловое – каковы значения module.id в компоненте?

    Сравнение JSON и XML

    Программно перемещаться с помощью реагирующего маршрутизатора

    личное сообщение socket.io

    Apache показывает PHP-код – после обновления на Mac до macOS Sierra

    Markdown «одиночная страница» веб-приложение PHP с предварительным просмотром в реальном времени?

    Как ускорить получение Powershell Get-Childitem над UNC

    Свяжите новую запись с существующей формой

    Как правильно использовать StringBuilder

    Вставка в vim через экран

    Ошибка Android «gps требует ACCESS_FINE_LOCATION», хотя мой файл манифеста содержит это

    Команда «Открыть в PuTTY» WinSCP: Могу ли я скопировать файлы из Linux обратно в Windows с терминала в открывшемся экземпляре PuTTY?

    Какой бесплатный инструмент для редактирования видео можно использовать в Windows, чтобы разрезать файл mp4?

    Есть ли Windows exe, который ничего не делает?

    Давайте будем гением компьютера.