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

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

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

53
задан Peter Lang 6 March 2012 в 21:16
поделиться

2 ответа

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

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)

вместо

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

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

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

Это был мой ответ до того, как вопрос был разъяснен, может быть все же полезным:

Вы можете использовать setVisible(false) на вашем JFrame, если вы хотите отобразить тот же самый кадр еще раз.
В противном случае вызовите dispose() на remove all of native screen resources.

.
85
ответ дан 7 November 2019 в 08:44
поделиться

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

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);
                }
            }
        });

    }
}
3
ответ дан 7 November 2019 в 08:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: