Закрыть форму, не закрывая другой?
Я хочу, чтобы отобразить два (или более) JFrames в то же время.
Когда я закрываю один из них (используйте кнопку закрытия по умолчанию), другие кадры все равно должны быть видны.
Как я могу это сделать?
2 ответа:
если у вас не хотите, чтобы ваше приложение, чтобы завершить, когда
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); } } }); } }