JFrame nur einmal öffnen

Hallo Leute,
habe folgendes Problem
Wenn ich mehrmals auf mein JButton klicke öffnet sich das JFrame auch gleich mehrfach. Das JFrame soll sich aber nur einmal öffnen. Habe es bereits mit einer IF / ELSE Abfrage probiert ob das Fenster offen ist aber leider ohne Erfolg :(.

LG,
Movementroboter

Da wir deinen Code nicht kennen, kann dir so keiner helfen. Deswegen: poste den relevanten Code und wir schauen uns das ganze an.

Wenn man nur mit einer Instanz eines JFrames arbeitet, kann auch nur ein JFrame sichtbar/offen sein und ein Prüfung überflüssig.

Ich würde in dem Fall einen JDialog anstatt JFrame verwenden.

    public JButton button;
    public JFrame frame;
    public JTable table;
    public Versionsinfo info;

 private void butVersionsInfoActionPerformed(java.awt.event.ActionEvent evt) {                                                
        butVersionsInfo.setFocusPainted(false);
            if (info.setVisible(true)) {
                Versionsinfo v = new Versionsinfo ();
                v.setVisible(true);
            } else {
                JOptionPane.showMessageDialog(null, "Bereits geöffnet");
            }
    }                      

Evtl wird im Listener das JFrame instantiiert. Aber ohne Code & wie von TS schon gesagt, können wir nicht helfen

mach lieber einen modalen Dialog anstatt eines Frames

Du setzt die SIchtbarkeit immer auf “true”, somit ist deine “if” Abfrage immer erfüllt. Du musst dein Frame eher Fragen “bist du sichtbar?” anstatt “jetzt bist du sichtbar!”

Wie kann dein Code compilieren? setVisible hat doch void als ReturnType, dass kann man doch nicht in eine if-Abfrage stecken?
Versuchs doch einfach mit

    info.setVisible(true)
}```

Er zeigt an das Info = NULL ist.

weil du es nirgends besetzt, ergo null.

info ist deine Instanzvariable, aber du erstellst dann eine Versionsinfo und speicherst das in v.

weiterhin fragt man mit isVisible() ab…
aber wie gesagt, schau dir lieber modale JDialoge an !

@Kevin94 das kommt sogar noch hinzu. War der Ansicht das das auch nen boolean zurück gibt.

Wenn das dein ganzer Code ist, fehlt da aber so einiges. Kein Wunder das das nicht geht.

[QUOTE=Movementroboter]```
private void butVersionsInfoActionPerformed(java.awt.event.ActionEvent evt) {
butVersionsInfo.setFocusPainted(false);
if (info.setVisible(true)) {
Versionsinfo v = new Versionsinfo ();
v.setVisible(true);
} else {
JOptionPane.showMessageDialog(null, “Bereits geöffnet”);
}
}


Jedes mal bei Knopfdruck wir deine neue Instanz von Versionsinfo erzeugt und sichtbar gemacht, was schonmal sehr fragwürdig ist. Das ist wie als ob du jedes mal fragst "ist der Kuchen fertig" aber jedes mal einen neuen Kuchenteig erstellst. (Grob gesagt)
Vorallem sagst du dem Versionsinfo es ist sichtbar, machst dann aber nichts mehr damit.
Weiterhin willst du fragen du ob es sichtbar ist (normalerweise mit isVisible wenn ich mich recht entsinne) und wenn ja erstellst du ein neues, wenn nicht sagst du es ist offen. 
Überdenke deine Logik nochmal

Probier das mal aus :

	 	if(info == null) {
	 		info = new Versionsinfo ();
	 	}
	 	else{
	 		if(info.isVisible()){
	 			 JOptionPane.showMessageDialog(null, "Bereits geöffnet");
	 		}
	 		else{
	 			info.setVisible(true);
	 		}
	 	}
 }```

dankeschön warum muss ich nun 2 mal auf den Button klicken um mein info fenster zu öffnen ?

Überleg doch mal genau was passiert in dem code…
Was passiert wenn er in die IF kommt… was passiert wenn er in die else kommt? Kommentier dir am besten mal alle Zeilen.

Deswegen ist einfach eine Lösung gepostet zu bekommen, keine wirkliche Lösung.