Chcę wyświetlić dwa (lub więcej) JFrames w tym samym czasie.
Po zamknięciu jednego z nich (użyj domyślnego przycisku zamykania) pozostałe ramki powinny być nadal widoczne.Zamknij jeden JFrame bez zamykania drugiego?
Jak mogę to zrobić?
Chcę wyświetlić dwa (lub więcej) JFrames w tym samym czasie.
Po zamknięciu jednego z nich (użyj domyślnego przycisku zamykania) pozostałe ramki powinny być nadal widoczne.Zamknij jeden JFrame bez zamykania drugiego?
Jak mogę to zrobić?
Jeśli nie nie chcą aplikacja do wypowiedzenia, gdy JFrame
jest zamknięta, należy
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)
zamiast
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DO_NOTHING_ON_CLOSE
(zdefiniowane w WindowCons tants): Nie rób niczego; wymagają, aby program obsługiwał operację w metodzie windowClosing zarejestrowanego obiektu WindowListener.DISPOSE_ON_CLOSE
(zdefiniowane w WindowConstants): Automatycznie ukrywaj i usuwaj ramkę po wywołaniu dowolnego zarejestrowanego obiektu WindowListener.EXIT_ON_CLOSE
(zdefiniowane w JFrame): Wyjdź z aplikacji, używając metody wyjścia systemu. Używaj tego tylko w aplikacjach.To była moja odpowiedź, zanim pytanie zostało wyjaśnione, nadal może być przydatne:
Można użyć setVisible(false)
na JFrame
jeśli chcesz ponownie wyświetlić tę samą ramkę.
W przeciwnym razie zadzwoń pod numer dispose()
do remove all of the native screen resources.
Czy to pomaga?
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);
}
}
});
}
}
to jest przydatne, dziękuję! – Keating
dziękuję, ale zamykam okno za pomocą przycisku zamykania w prawym górnym rogu. Nie używa definiującego setVisible (false) i musi zatrzymać wątek. – Keating
Myślę, że muszę przesłonić niektóre przeniesione, nie wiem, który został przeniesiony, ale wierzę, że to nie koniec. – Keating
Nie jestem pewien, co próbujesz osiągnąć, czy możesz edytować pytanie i dodawać informacje o tym, co próbujesz zrobić, a co nie działa? –