Per JButton ein JFrame schliessen

Status
Nicht offen für weitere Antworten.

CiD

Mitglied
Hallo,

Ich komm gleich zur Sache ;)

Zum Szenario:
- 1 JFrame als MasterFrame (eigene Klasse)
- 1 JPanel mit JButton+ActionListener (eigene Klasse)
- 1 App.java mit main() um JFrame auszuführen (denke aber nicht weiter wichtig, nur Vollständigkeitshalber mit angegeben)
- alles im gleichen package

Auf dem JFrame befindet sich ein JContenPane vom Typ JPanel welches auch in der JFrame-Klasse Deklariert und initialisiert/instanziert wird. Über den JContentPane wird dann das "externe" JPanel per "add(getJPanel(), null)" zum JFrame hinzugefügt.

Nun möchte ich das JFrame per klick auf dem JButton, der sich auf den "externen" JPanel befindet, beenden/schliessen mit "System.exit(0)" o.ä.

Leider hab ich bis jetzt noch nicht herausgefunden wie ich über die "actionPerformed()" des JButtons auf die JFrame Instanz zugreifen kann um sie zu beenden.

Jemand eine Idee ?

Danke
 

Verjigorm

Top Contributor
Die Klasse mit dem Button benötigt eine Referenz auf die Klasse des JFrames

Dann kannst du in der actionPerformed Frameklasse.dispose() aufrufen (falls die Klasse JFrame erweitert) oder eine Methode zur Verfügung stellen, die dies organisiert
 

CiD

Mitglied
hm...Danke dir schonmal.

Ich blick da aber trotzdem grad nich richtig durch ???:L

Wie komm ich da nun an eine Referenz des schon instanzierten JFrames ?

Hier mal ein vereinfachter überblick über meine Klassen:

App.java (main)
Code:
package de.swings;

public class App {

    public static void main(String[] args) {
        new Swings();
    }

}

Swings.java (JFrame)
Code:
package de.swings;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;

public class Swings extends JFrame {

    private JPanel jContentPane = null;
    private SwingsPanel swingsPanel = null;

    public Swings() {
        super();
        initialize();
    }

    private void initialize() {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (Exception exc) {
            exc.printStackTrace();
        }
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setContentPane(getJContentPane());
        this.setVisible(true);
    }

    private JPanel getJContentPane() {
        if (jContentPane == null) {
            jContentPane = new JPanel();
            jContentPane.setLayout(null);
            jContentPane.add(getSwingsPanel(), null);
        }
        return jContentPane;
    }

    private SwingsPanel getSwingsPanel() {
        if (swingsPanel1 == null) {
            swingsPanel1 = new SwingsPanel();

        }
        return swingsPanel;
    }
}

SwingsPanel.java (JPanel)
Code:
package de.swings;

import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JPanel;

public class SwingsPanel extends JPanel {

    private JButton jButton_01 = null;

    public SwingsPanel1() {
        super();
        initialize();
    }

    private void initialize() {
        this.setLayout(null);
        this.add(getJButton(), null);
    }

    private JButton getJButton() {
        if (jButton_01 == null) {
            jButton_01 = new JButton();
            jButton_01.setBounds(new Rectangle(275, 115, 120, 31));
            jButton_01.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent evt) {
                    jButtonActionPerformed(evt);
                }
            });
        }
        return jButton_01;
    }

    
    private void jButtonActionPerformed(ActionEvent evt) {
        //TODO : closing (JFrame)Swings
    }
}
 

Ebenius

Top Contributor
Wie komm ich da nun an eine Referenz des schon instanzierten JFrames ?
Am besten so:
Code:
public class SwingsPanel extends JPanel {

/*
 * ...
 */

    private void jButtonActionPerformed(ActionEvent evt) {
        // get the button 
        final Component source = (Component) evt.source();

        // get the window instance
        final Window window = SwingUtilities.getWindowAncestor(source);

        // dispose the window
        window.dispose();
    } 
}

Grüße, Ebenius
 

CiD

Mitglied
Hey vielen dank Ebenius funktioniert wunderbar wenn ich anstatt "evt.source" (gibs nicht) -> "evt.getSource()" verwende :)

Noch etwas, evtl. auch nebensächlich:
Mein GUI-Builder (VEP 1.4 in Eclipse 3.4.1) meldet mir aber bei der Verwendung von "Window" eine NullPointerException ala
Code:
java.lang.NullPointerException(public static java.awt.Window javax.swing.SwingUtilities.getWindowAncestor(java.awt.Component))"

:shock:

Hat das was zu bedeuten ? Muss ich hier noch eine Exception abfangen ?
 

Ebenius

Top Contributor
CiD hat gesagt.:
Hey vielen dank Ebenius funktioniert wunderbar wenn ich anstatt "evt.source" (gibs nicht) -> "evt.getSource()" verwende :)

Das kommt davon, wenn man Code im Browser hackt. :-D

CiD hat gesagt.:
Mein GUI-Builder (VEP 1.4 in Eclipse 3.4.1) meldet mir aber bei der Verwendung von "Window" eine NullPointerException [...] Muss ich hier noch eine Exception abfangen ?

Ja.

Grüße, Ebenius
 

CiD

Mitglied
Ebenius hat gesagt.:
Danke danke, werd ich doch gleich mal IN ECLIPSE hacken :lol:

Hab hier noch was feines was evtl. dein Ego stärkt :roll:
Der VEP Kapituliert bei:
Code:
final Component source = (Component) evt.getSource();

und wedelt mit ner Fahne wo draufsteht :
Code:
java.lang.IllegalArgumentException(IWAV0177E Expression "evt" is too complicated)
:lol: :lol: :lol:

Danke dir jedenfalls für deine Mühe, hab als Anfänger wieder mal was dazugelernt :)
 

Verjigorm

Top Contributor
In "Visual Classes" sollte man keine Funktionalitäten einbauen, sondern das Ganze abtrennen
Ein Stichwort dazu wäre MVC
 

CiD

Mitglied
Danek für den Tip Verjigorm :)

Kennst du zufällig eine gute Anlaufstelle um sich über MVC in Java zu informieren ? Ein gutes Buch, eine Seite ?
Bin für jeden hinweis dankbar :)
 

CiD

Mitglied
Super, die Variante mit dem MVC-Pattern klappt wunderbar, war auch gar nicht so schwer nachvollziehbar dank der sehr guten Erklärung von André Uhres. Ich denke ich hab es auch recht gut verstanden und innerlich Manifestiert...hoff ich :roll:

Besten Dank @x.l für den link, bei Euch gibts anscheinend wesentlich mehr in Sachen Java zu finden als bei Goggle ^^

Welch Glück das ich her gefunden hab, Problem solved, Thread kloset :lol:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Interface JButton etc. wird in JFrame mit paint() nicht angezeigt Java Basics - Anfänger-Themen 6
M Input/Output JFrame mit JButton und JTextfield Java Basics - Anfänger-Themen 114
Hilde22 Neu Start JButton einfügen Java Basics - Anfänger-Themen 2
W GUI - JButton ohne Funktion? Java Basics - Anfänger-Themen 24
M JButton setBackground() färbt nicht den ganzen Knopf Java Basics - Anfänger-Themen 4
C JButton reagiert nicht auf actionListener Java Basics - Anfänger-Themen 15
G jButton führt Main Methode nicht richtig aus Java Basics - Anfänger-Themen 3
J Jbutton blinkt Java Basics - Anfänger-Themen 5
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
E JButton und JTextField Java Basics - Anfänger-Themen 1
V_Fynn03 Erste Schritte JButton funktioniert nicht trotz richtiger Methode. Java Basics - Anfänger-Themen 17
J Erste Schritte if Abfrage von JButton in 2. Klasse Java Basics - Anfänger-Themen 27
J Erste Schritte Actionlistener für tbar/ JButton Java Basics - Anfänger-Themen 15
krgewb Icon von JButton ändern Java Basics - Anfänger-Themen 1
P JButton -Arrays Java Basics - Anfänger-Themen 4
A JButton in anderer Klasse bearbeiten. Java Basics - Anfänger-Themen 2
L Erste Schritte JButton reagiert nicht Java Basics - Anfänger-Themen 5
S Bild über JButton legen Java Basics - Anfänger-Themen 3
V Einem JButton anweisungen geben Java Basics - Anfänger-Themen 4
D Methoden JButton und JLabel in einer Methode erstellen Java Basics - Anfänger-Themen 5
F Interface JButton von anderer Klasse hinzufügen Java Basics - Anfänger-Themen 2
J JButton macht was er will Java Basics - Anfänger-Themen 3
D JButton soll Farbe von JTextfield ändern Java Basics - Anfänger-Themen 5
H JButton - Wechsel der Textfarbe alle 500ms Java Basics - Anfänger-Themen 10
G KeyListener und JButton vertragen sich nicht Java Basics - Anfänger-Themen 1
N JButton anpassen Java Basics - Anfänger-Themen 3
S JButton soll für bestimmte Zeit verschwinden Java Basics - Anfänger-Themen 5
schoenosrockos JButton füllt immer das ganze frame Java Basics - Anfänger-Themen 1
D JButton in JDialog mit Action belgen Java Basics - Anfänger-Themen 6
V JButton einer anderen Klasse übergeben? Java Basics - Anfänger-Themen 6
F JButton [] mit Werten hinterlegen Java Basics - Anfänger-Themen 10
M Code um per jButton ein neues Fenster zu öffnen Java Basics - Anfänger-Themen 3
A weiter JButton Fehler Java Basics - Anfänger-Themen 3
W JTable mit einem JButton-Array füllen Java Basics - Anfänger-Themen 4
S JCombobox und JButton verknüpfen Java Basics - Anfänger-Themen 6
V wie kann ich eine Schleife pausieren, bis ein Jbutton gedrückt wird ? Java Basics - Anfänger-Themen 17
N Erste Schritte JButton reagiert nur einmal. Java Basics - Anfänger-Themen 12
S JButton Java Basics - Anfänger-Themen 2
A Farben wechseln mit JButton Java Basics - Anfänger-Themen 2
S Farbe eine Zeile in JTable ändern, wenn JButton geklickt wurd Java Basics - Anfänger-Themen 4
F Funktion eines JButton in einen Vektor verlagern Java Basics - Anfänger-Themen 4
A Labels Inner JButton Event Erstellbar? Java Basics - Anfänger-Themen 3
K JButton alles zurücksetzen Java Basics - Anfänger-Themen 1
U JButton: Beschriftung ueber Variable zuweisen Java Basics - Anfänger-Themen 6
S JButton erscheint erst bei Mouseover Java Basics - Anfänger-Themen 10
S JButton mit ActionListener Java Basics - Anfänger-Themen 5
S JDK installieren JButton BorderPoints?! Java Basics - Anfänger-Themen 7
E Problem mit erben von JButton Java Basics - Anfänger-Themen 7
J Bei Hinzufügen von JButton Programm langsam Java Basics - Anfänger-Themen 3
J Verknüpfung von JButton to JTextField Java Basics - Anfänger-Themen 4
S Jbutton per Passworteingabe aktivieren Java Basics - Anfänger-Themen 2
G über JButton Action einen anderen Button verändern Java Basics - Anfänger-Themen 7
H JButton - Icon(.png) aus resources laden Java Basics - Anfänger-Themen 23
M Hintergrundbild für JButton Java Basics - Anfänger-Themen 6
A jbutton - icon linksbündig, text zentriert Java Basics - Anfänger-Themen 10
J Hilfe bei JButton Java Basics - Anfänger-Themen 6
A JButton[] und String[] in doppelter For-Schleife Java Basics - Anfänger-Themen 4
W JButton in gleiche Größe bringen Java Basics - Anfänger-Themen 4
pg1337 JButton zuschneiden Java Basics - Anfänger-Themen 3
T Modales JDialog schliessen mit JButton Java Basics - Anfänger-Themen 2
D JButton Array setBackground Java Basics - Anfänger-Themen 2
F JButton wie selektierter JTabbebPane-Header Java Basics - Anfänger-Themen 7
G jButton bei Klick String +1 Java Basics - Anfänger-Themen 5
C OOP Java JButton mit Funktion belegen Java Basics - Anfänger-Themen 3
S JButton wird nicht angezeigt Java Basics - Anfänger-Themen 14
C JButton.getIcon() != null Java Basics - Anfänger-Themen 3
E JButton-Text wird in Schleife nicht geändert Java Basics - Anfänger-Themen 4
F welches Layout für JButton-Liste verwenden Java Basics - Anfänger-Themen 6
T JButton Text ändern Java Basics - Anfänger-Themen 4
L JButton erscheint nur mit pack() Java Basics - Anfänger-Themen 3
U Passwort auf JButton setzen. Java Basics - Anfänger-Themen 2
E JButton Hintergrund / Rahmen entfernen? Java Basics - Anfänger-Themen 4
L Bild auf einem JButton Java Basics - Anfänger-Themen 4
K JButton.setText Problem Java Basics - Anfänger-Themen 6
M JButton und DisabledIcon Java Basics - Anfänger-Themen 2
K jButton zur Laufzeit hinzufügen Java Basics - Anfänger-Themen 22
A GUI - JButton problem! Java Basics - Anfänger-Themen 5
M JButton selbst nachprogrammieren Java Basics - Anfänger-Themen 3
A JButton Textrahmen Java Basics - Anfänger-Themen 7
A Platzierung eines JButton Java Basics - Anfänger-Themen 4
D JButton oder ImageIcon klickt "langsam" Java Basics - Anfänger-Themen 5
E JButton klassenübergreifend nutzen? Java Basics - Anfänger-Themen 6
R Liste graphischer Objekte z.B. JButton dynamisch erstellen Java Basics - Anfänger-Themen 13
J JList Inhalt nach JButton Klick aktualisieren Java Basics - Anfänger-Themen 8
S JButton trotz Box-Layout skalieren Java Basics - Anfänger-Themen 6
P JButton identifizieren Java Basics - Anfänger-Themen 8
K Funktion zu einem JButton hinzufügen Java Basics - Anfänger-Themen 27
D HTML Text von jButton disablen Java Basics - Anfänger-Themen 2
E Auf JButton in Arraylist zugreifen Java Basics - Anfänger-Themen 6
E Andere Form eines JButton Java Basics - Anfänger-Themen 17
A JButton ActionListener nach einmaligem Ausführen zurücksetzen Java Basics - Anfänger-Themen 13
B JButton Größe einstellen? Java Basics - Anfänger-Themen 3
E Zeilenumbruch in JButton mit Variable Java Basics - Anfänger-Themen 2
A JButton erscheint nicht (BlueJ) Java Basics - Anfänger-Themen 2
M JButton sieht komisch aus :-) Java Basics - Anfänger-Themen 5
B JPanel über JButton umändern Java Basics - Anfänger-Themen 9
D JButton transparent bekommen? Java Basics - Anfänger-Themen 5
H JButton Unsichtbar Java Basics - Anfänger-Themen 7
R JTextField mittels JButton in Konsole ausgeben Java Basics - Anfänger-Themen 2
J Variable die bei JButton Clicks mitzählt Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben