jButton wieder aktivieren

Hallo habe bereits den JButton Versionsinfo deaktiviert wenn das JFrame offen ist aber ich möchte nun wenn ich das JFrame schließe gerne den JButton wieder aktivieren.

        Versionfenster v = new Versionfenster ();
        v.setVisible(true);
        butVersionsInfo.setEnabled(false);```

Provokante Antwort: Dann tu es?! :stuck_out_tongue_winking_eye:

Ein wenig konstruktiver: Ich denke dir ist klar, dass das mit butVersionsInfo.setEnabled(true); klappen würde. Du möchtest wahrscheinlich nur wissen, wann du diesen Aufruf machen musst bzw wo er stehen muss. Meine Forschungen ergaben diesen Treffer: http://stackoverflow.com/questions/9093448/do-something-when-the-close-button-is-clicked-on-a-jframe
Mehr Treffer findest du hier: java jframe how to do things on close operation - Google Suche

[QUOTE=Movementroboter]Hallo habe bereits den JButton Versionsinfo deaktiviert wenn das JFrame offen ist aber ich möchte nun wenn ich das JFrame schließe gerne den JButton wieder aktivieren.

        Versionfenster v = new Versionfenster ();
        v.setVisible(true);
        butVersionsInfo.setEnabled(false);```[/QUOTE]

Ein bisschen mehr Infos (oder Code) wären nicht schlecht. Normalerweise hat man nur 1 JFrame für seine Anwendung und nimmt JDialog für weitere Fenster. Wo liegt denn nun dein Button genau?

schau dir http://docs.oracle.com/javase/7/docs/api/java/awt/event/WindowListener.html an.

ich wiederhole mich gerne - nutze fuer dein Fenster einen modalen Dialog, dann hast du all die Probleme nicht

Müsste das nicht in etwa so aussehen ?

            Versionfenster v = new Versionfenster ();
            v.setVisible(true);
            butVersionsInfo.setEnabled(false);
        } else {
            butVersionsInfo.setEnabled(true);
        }```

[QUOTE=bygones]schau dir http://docs.oracle.com/javase/7/docs/api/java/awt/event/WindowListener.html an.

ich wiederhole mich gerne - nutze fuer dein Fenster einen modalen Dialog, dann hast du all die Probleme nicht[/QUOTE]

Dann sind ja auch alle anderen Buttons deaktiviert:confused: und ich kann nur noch im versionsfenster herumklicken.

versionsfenster klingt danach, dass du infos zur version anzeigst. Wenn der User das gesehen hat, klickt er auf schliessen, kehrt zu dem Hauptfenster zurueck und alles geht weiter.

Warum sollte das Fenster offen bleiben ? und warum musst du dich dann mit dem ganzen enablement rumschlagen?

und dein code da oben kann nicht funktionieren, du kannst nicht einfach eine booleasche variable (setVisible return) mit einer instanz vergleichen.

Hast du dir die tipps von oben angschaut ? die links ?

ja da hast du schon irgendwie recht bygones :slight_smile: aber möchte halt trotzdem gerne wissen wie es funktioniert das ich den Button Deaktiviere und wieder Aktiviere wenn ich das Fenster schließe.

Ist der oben genannte Lösungsansatz so falsch ?

ja habe mir bereits oben die links angeschaut aber komme trotzdem irgendwie nicht weiter :frowning:

Dann mach das doch einfach mal mit einem modalen JDialog. Dem übergibst du als Referenz das aufrufende Objekt mit und beim Schliessen des Dialogs setzt du den Button eben wieder auf sichtbar, z.B. über eine Methode in dem aufrufenden Objekt (also da, wo dein Button ist).

Kurz & knapp: Ja.

An welchem Punkt hängt es?

Wenn ich die Lösung(en) auf Stackoverflow richtig verstanden habe, dann kannst du auf zwei Weisen herangehen:
[ol]
[li]Du überschreibst JFrame und implementierst die windowClosing() neu
[/li][li]Die registrierst einen Listener auf dein JFrame, der beim Schließen des JFrames reagiert
[/li][/ol]

Diese beiden Vorgehensweisen mach auf jeden Fall auch Sinn. Wobei ich persönlich eher davon abraten würde JFrame zu überschreiben (muss aber jeder selbst wissen), stattdessen würde ich den Listener-Ansatz verfolgen.

hat wer noch ein Beispiel Code für mich ?

Habe alles über den GUI Builder gemacht ich weiß jetzt nicht genau wie ich es überschreiben soll mit public void windowClosing(WindowEvent e)

    private void butVersionsInfoActionPerformed(java.awt.event.ActionEvent evt) {                                                

        
        /*butVersionsInfo.setFocusPainted(false);
        Versionfenster v = new Versionfenster ();
        v.setVisible(true);
        butVersionsInfo.setEnabled(false);
        */
        
    }                                               ```

Schau dir Gonzo’s link richtig an. Dort findest du die Lösung

Das ist natürlich ne wichtige Information. :wink:

Und welcher ist DER GUI-Builder? WindowBuilder bei Eclipse? Swing GUI Builder in Netbeans?

Ich kann dir nicht genau sagen wie man mit sowas umgeht, wenn man einen GUI-Builder verwendet (hab ich nie gemacht), von daher müsste dir da jemand anderes helfen.

Ansonsten zu 1.: Eine Klasse erstellen die JFrame „extended“. Dort dann windowClosing() überschreiben.
Zu 2.: Irgendwo erzeugst du ein JFrame-Objekt. Lass es uns frame nennen. Dieses Objekt nimmst du und schreibst frame.addWindowListener(…) (siehe Link).

upps tut mir leid hätte ich mal lieber gleich am anfang sagen sollen :slight_smile:
Es handelt sich um den GUI BUILDER IN NETBEANS :slight_smile:

Habe in meinem Package Person dem JFrame ein Event hinzugefügt und möchte nun über WindowClosing mein Button gerne wieder aktiv setzen.Leider weiß ich nicht wirklich wie ich das machen soll da mein butPerson in einem anderen Package liegt und WindowClosing private ist.

Nutze den GUI BUILDER von Netbeans

        
    }```

Guck dir das mal an:

Versionsinfo
[spoiler]

import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


public class Versionsinfo extends JFrame {

	private JPanel contentPane;
	private Hauptmenüscreen hauptmenue;
	
	public Versionsinfo(Hauptmenüscreen hauptmenueuebergeben) {
		
		this.setVisible(true);
		contentPane = new JPanel();
		hauptmenue = hauptmenueuebergeben;
		this.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
				hauptmenue.setButtonEnabled();
			}
		});
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(120, 120, 450, 300);
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblSchliesseDiesesFenster = new JLabel("Schliesse dieses Fenster und der Button ist wieder akitv");
		lblSchliesseDiesesFenster.setBounds(5, 5, 424, 252);
		lblSchliesseDiesesFenster.setHorizontalAlignment(SwingConstants.CENTER);
		contentPane.add(lblSchliesseDiesesFenster);
	}

}

[/spoiler]

Hauptmenüscreen
[spoiler]

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Hauptmenüscreen extends JFrame {
	
	public JButton button;
	public Versionsinfo info;
	private JPanel contentPane;	
	private JButton btnNewButton_1;
	private static Hauptmenüscreen frame;
	
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					frame = new Hauptmenüscreen();
					frame.setVisible(true);

				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
	
	public Hauptmenüscreen() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JButton btnNewButton = new JButton("Macht nichts, bleibt aber immer enabled");
		btnNewButton.setBounds(10, 77, 414, 23);
		contentPane.add(btnNewButton);
		
		btnNewButton_1 = new JButton("Oeffnet dein anderen Frame und ist solange disabled");
		btnNewButton_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				btnNewButton_1.setEnabled(false);
				info = new Versionsinfo(frame);
			}
		});
		btnNewButton_1.setBounds(10, 120, 414, 23);
		contentPane.add(btnNewButton_1);
	}
	
	public void setButtonEnabled(){
		btnNewButton_1.setEnabled(true);
	}
}

	

[/spoiler]

Da nun die Lösung wohl schon gepostet wurde :(, ein kleine Hinweis

GuiBuilder sollte man vermeiden. Der erzeugt Code den später keiner mehr lesen kann (verbessert mich wenn es mittlerweile anders ist).
Fang besser Schritt für Schritt an. Baue den Code selbst zusammen. Und wenn du eine Frage hast, versuch alle nötigen Informationen zu liefern, sodass man dir nicht alles aus der Nase ziehen muss ^^
Eine Information wie „habe den link angeschaut, komme aber nicht weiter“ bringt nichts, da wir dann nicht wissen warum und wieso und dir somit nicht sagen können woran es liegt.

Habe in meinem Package Person dem JFrame ein Event hinzugefügt und möchte nun über WindowClosing mein Button gerne wieder aktiv setzen.Leider weiß ich nicht wirklich wie ich das machen soll da mein butPerson in einem anderen Package liegt und WindowClosing private ist.

Erstelle eine Methode die public ist und den Button aktiv setzt, mit dieser kannst du dann aus formWindowClosing() den Button aktiv setzten.