JFrame nicht verstecken, wenn setVisible (false)
Frage
import javax.swing.*;
class Frame extends JFrame{
Frame() {
JFrame j = new JFrame();
j.setBounds(100, 200, 120, 120);
j.setTitle("null");
j.setVisible(true);
j.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
public class test001 {
public static void main (String Args[]){
Frame f = new Frame();
System.out.print("Visible = True");
f.setVisible(false);
System.out.print("Visible = false");
}
}
nach dem setVisible (false) Befehl. Die JFrame Fenster zeigen immer noch auf meinem Schreibtisch. Wie kann ich das Problem beheben?
Lösung
Sie erstellen eine andere JFrame
in Ihrem Konstruktor. Unter der Annahme, was Sie wollen, ist Ihre Frame
Klasse unsichtbar zu sein, dies zu tun:
class Frame extends JFrame {
Frame() {
setBounds(100, 200, 120, 120);
setTitle("null");
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
public class test001 {
public static void main(String Args[]) {
Frame f = new Frame();
System.out.print("Visible = True");
f.setVisible(false);
System.out.print("Visible = false");
}
}
Andere Tipps
Das Problem ist, dass Ihre Hauptmethode verwendet verschiedene JFrame, dass Ihr Konstruktor. Ihr Rahmen Konstruktor erstellt neue JFrame-Instanz (mit neuer JFrame). Wenn Sie f.setVisible (false) nennen, ist es an den Rahmen geht, aber nicht erstellt JFrame.
Das Problem hier ist, dass Ihre „Frame“ Klasse instanciates eine neue JFrame. Der Aufruf setVisible auf den Rahmen berührt nicht die JFrame, die gezeigt wird.
Sie können das Problem beheben, indem entweder nur eine JFrame Instanz verwenden, oder einfach nur Subklassen. Nicht beides tun.
Neben den beiden unterschiedlichen Bilder, die Sie beziehen sich auf (das ist das Problem beantwortet https://stackoverflow.com/a/1450488/ 1326149 ), sollten Sie alle Grafikoperationen in dem EVT-Thread tun (weil Ihr Programm selbst wenn es funktioniert gut für Sie könnten auf verschiedene Plattformen nicht tragbar sein).