Interface Wie schließt man ein anderes JFrame Fenster?

Thomathy

Mitglied
Ich habe alle Grundlagen von Java durch. Nun möchte ich anfangen, ein Programm zu schreiben. Dabei scheitere ich jedoch bereits daran, in Eclipse - WindowBuilder ein Fenster aus einem anderen Fenster heraus zu schließen.
public void close(){ frame.dispose(); }

So, frame kann ich jedoch nicht public static setzen, weil dann alles andere rummeckert. Aber ohne das kann ich von anderswo nicht drauf zugreifen... Die Klasse mit der close() Methode heißt Home. Also müsste man ja eigentlich Home.close(); machen können. Ich kriege es jedoch nicht hin. Wie macht mans dann?

LG Tom
 
Ich kenne mich jetzt mit WindowBuilder nicht gut aus aber du musst ja irgend ein Objekt da haben also z.B.

Java:
Home frame = new Home();

Dann musst du halt auf das Objekt zugreifen also

Java:
frame.dispose();

weiß jetzt nicht ob ich dein Problem richtig verstanden habe oder ob mir nötige Kenntnisse über den WindowBuilder fehlen aber hoffe ich konnte helfen!

LG
 

Thomathy

Mitglied
Es geht mir darum, dass ich auf frame aus einer anderen Klasse zugreifen muss. Und das funzt net so ganz. Nur mit @SuppressWarnings("static-access")

Denn, wenn ich "public static JFrame frame;" setze, kommt, wenn ich in der selben Klasse window.frame.setVisible(true); verwende ein Meldung mit "The static field Home.frame should be accessed in a static way"...
 
K

kneitzel

Gast
Du solltest dich einmal noch etwas mit objektorientierten Design beschäftigen.

Objekte können andere kennen. Und du hast ja einen Ablauf ...
Irgend eine Instanz einer Klasse erschafft eine andere und kann dann da eine Referenz z.B. auf sich selbst hinterlegen.

Dann hat eine Klasse z.B. eine Instanzvariable frameToClose und diese Instanzvariable wird per Konstruktor oder Setter gesetzt.
Und dann kannst du natürlich darauf close() aufrufen.

Zeig etwas mehr von Deinem Code / Aufbau und wir können Dir an Deinem Code zeigen, wie es aussehen könnte.
 

Thomathy

Mitglied
Du solltest dich einmal noch etwas mit objektorientierten Design beschäftigen.

Objekte können andere kennen. Und du hast ja einen Ablauf ...
Irgend eine Instanz einer Klasse erschafft eine andere und kann dann da eine Referenz z.B. auf sich selbst hinterlegen.

Dann hat eine Klasse z.B. eine Instanzvariable frameToClose und diese Instanzvariable wird per Konstruktor oder Setter gesetzt.
Und dann kannst du natürlich darauf close() aufrufen.

Zeig etwas mehr von Deinem Code / Aufbau und wir können Dir an Deinem Code zeigen, wie es aussehen könnte.
Hallo Kneitzel. Danke für deine Antwort!

Mein Code ist folgender, und dabei fast ausschließlich von WindowsBuilder in Eclipse auto-generiert:
Java:
package org.enterfox.org.interfaces;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JTextField;

import org.enterfox.org.utils.LoginClass;

import javax.swing.JButton;
import javax.swing.JPasswordField;
import java.awt.Label;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class Home {
    private JFrame frame;
    private JTextField textField;
    private JPasswordField passwordField;
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
           
            public void run() {
                try {
                   
                    Home window = new Home();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
   
    /**
     * Create the application.
     */
    public Home() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 265, 193);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);
       
        textField = new JTextField();
        textField.setBounds(10, 36, 229, 20);
        frame.getContentPane().add(textField);
        textField.setColumns(10);
       
        JButton btnNewButton = new JButton("Login");
        btnNewButton.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent arg0) {
                LoginClass.login(textField.getText(), passwordField.getPassword());
            }
        });
        btnNewButton.setBounds(138, 123, 101, 23);
        frame.getContentPane().add(btnNewButton);
       
        passwordField = new JPasswordField();
        passwordField.setBounds(10, 92, 229, 20);
        frame.getContentPane().add(passwordField);
       
        Label label = new Label("Password");
        label.setBounds(10, 62, 62, 22);
        frame.getContentPane().add(label);
       
        Label label_1 = new Label("Admin");
        label_1.setBounds(10, 8, 62, 22);
        frame.getContentPane().add(label_1);
    }
}

Und dabei nimmt, soweit ich verstanden habe, JFrame frame dann das Objekt des Fensters an. Mit frame.dispose(); kann man es zumindest schließen. Nun müsste ich ja quasi auf frame zugreifen können. Aber ich schaffe es nicht. Bisher habe ich immer Bukkit Plugins in Minecraft entwickelt. Da konnte man einfach "public static Plugin p;" und im onEnable() dann p = this; festlegen. Aus den anderen Klassen konnte man dann über Main.p.[...] auf Methoden etc. zugreifen, die public static gesetzt waren. Hier ist das ganze irgendwie nicht so einfach. Wohl ein Vorteil daran, dass ich erstmal richtiges Java lerne, ohne auf API basiert zu coden, wo andere mir die Arbeit quasi abgenommen haben.
 

Thomathy

Mitglied
Du solltest dich einmal noch etwas mit objektorientierten Design beschäftigen.

Objekte können andere kennen. Und du hast ja einen Ablauf ...
Irgend eine Instanz einer Klasse erschafft eine andere und kann dann da eine Referenz z.B. auf sich selbst hinterlegen.

Dann hat eine Klasse z.B. eine Instanzvariable frameToClose und diese Instanzvariable wird per Konstruktor oder Setter gesetzt.
Und dann kannst du natürlich darauf close() aufrufen.

Zeig etwas mehr von Deinem Code / Aufbau und wir können Dir an Deinem Code zeigen, wie es aussehen könnte.
Okey, habe es doch geschafft nun. Und zwar so, wie es eigentlich sollte. Hatte da wohl irgendeinen Schusseligkeitsfehler eingebaut.

Meine Lösung:
Java:
public static Home h; //im kopf der klasse definiert
//[..]
h = window; //wenn das window von WindowBuilder definiert wird

//Folgendes als Methode:
public static void closeWindow() {
    h.frame.dispose();
}

//und in der anderen Klasse dann:
Home.closeWindow();

/*Wobei sich das mit "public static Home h = null;""
und dann einer entsprechenden IF-Abfrage, ob Home NULL ist,
feiner erledigen lässt. Denn dann wird ja sicherheitshalber nochmal überprüft, ob
überhaupt ein Fenster offen ist, das geschlossen werden kann.

Keiner mag Exceptions, die nicht geplant sind ;)

*/

Ich sage danke, gebe mir selbst eine Nuss und wünsche noch einen schönen Abend und morgen ein entspanntes Wochenende.

LG Tom
 
K

kneitzel

Gast
Das mag technisch so gehen, aber das ist so nicht sinnvoll!

Ebenso scheint mir dieses Konstrukt nicht wirklich gut zu sein:
Java:
        btnNewButton.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent arg0) {
                LoginClass.login(textField.getText(), passwordField.getPassword());
            }
        });

LoginClass ist eine andere Klasse und login eine statische Methode?

static bitte immer vermeiden, wenn es geht. Es gibt nur wenige Dinge, wo static sein muss oder es Sinn macht. Meist ist es einfach nur ein Zeichen, dass jemand sein Design noch einmal überdenken möchte...

Also erst einmal Code schöner schreiben - es bieten sich Lambdas und Methodenreferenzen an. Also der Code oben mit anonymer Inneren Klasse würde ich umschreiben zu sowas:
[CODE lang="java" title="Code 1.1 umgeschrieben"] btnNewButton.addMouseListener(this::loginAction);
// btnNewButton.addMouseListener(e -> loginAction(e)); // Lambda falls Methodenreferenz nicht zusagen sollte ...

// Dann innerhalb der Klasse noch die Methode

public void loginAction(MouseEvent arg0) {
LoginClass.login(textField.getText(), passwordField.getPassword());
}[/CODE]

Das Statische wird dann direkt umgangen mit z.B. sowas:
Java:
   public void loginAction(MouseEvent arg0) {
       LoginClass loginClass = new LoginClass();
       loginClass.setFrameToClose(frame);
       loginClass.login(textField.getText(), passwordField.getPassword());
   }

LoginClass muss das natürlich dann verstehen und wird dann z.B. so erweitert:
Java:
public class LoginClass {
    
    private Frame frameToClose;
    
    public void setFrameToClose(Frame frame) {
        this.frameToClose = frame;
    }
    
    public void closeOtherWindow() {
        if (frameToClose != null)
            frameToClose.dispose();
    }
}

Dann brauchst Du keine static Variablen oder Methoden mehr (bis auf die main Methode natürlich!)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J CMD schließt sich automatisch Java Basics - Anfänger-Themen 5
Hanschyo Programm schließt sich einfach Java Basics - Anfänger-Themen 2
A Dialog schließt erst nach 2x Klicken auf Schließen Java Basics - Anfänger-Themen 2
B Konsole schließt sich sofort Java Basics - Anfänger-Themen 8
M Input/Output Scanner schließt nicht Java Basics - Anfänger-Themen 2
D Frame schließt gleich alle Frames Java Basics - Anfänger-Themen 5
B warum schließt synchronized andere threads nicht aus? Java Basics - Anfänger-Themen 7
M DOS-Ausgabefenster schließt nach Hundertstelsekunde - Wie kann ich das abschalten? Java Basics - Anfänger-Themen 5
P FileDiaglog schließt nicht Java Basics - Anfänger-Themen 9
R windowclosing - fenster schließt immer trotz abfrage Java Basics - Anfänger-Themen 2
G JWindow schließt mit dispose() nicht richtig Java Basics - Anfänger-Themen 2
A Fenster bleibt leer und schließt sich nicht Java Basics - Anfänger-Themen 26
W JComboBox- Auswahl schließt komplettes Fenster Java Basics - Anfänger-Themen 10
G Programm schließt sich nicht Java Basics - Anfänger-Themen 5
P Probleme mit JUnit-Tests, es kommt was anderes raus als bei manuellen Tests Java Basics - Anfänger-Themen 5
F Methode für Teilbarkeit durch 5 tut was anderes.... Java Basics - Anfänger-Themen 3
L Nur Bestimmte Werte aus einem Array in ein anderes Speichern Java Basics - Anfänger-Themen 11
B Enum innerhalb einer Klasse / anderes Konzept Java Basics - Anfänger-Themen 8
A JDK installieren Oracle JDK oder was anderes? Java Basics - Anfänger-Themen 6
R Vererbung werte von einem Objekt aus ein anderes übertragen Java Basics - Anfänger-Themen 7
B Mit Java anderes Java Programm starten Java Basics - Anfänger-Themen 3
M aus Fenster anderes Fenster öffnen und wieder umgekehrt Java Basics - Anfänger-Themen 5
I JFrame minimieren wenn anderes Programm minimiert wird Java Basics - Anfänger-Themen 1
E Anderes Programm ausführen Java Basics - Anfänger-Themen 8
L Erste Schritte Mal was anderes Java Basics - Anfänger-Themen 9
T TreeSet sortiert in ein anderes kopieren Java Basics - Anfänger-Themen 2
L Anderes Layout für JOptionPane? Java Basics - Anfänger-Themen 6
B Warum haben Java Programme ein anderes Design? Java Basics - Anfänger-Themen 5
D Array auslesen und und Werte in ein anderes array anlegen Java Basics - Anfänger-Themen 5
D Auf anderes Projekt zugreifen Java Basics - Anfänger-Themen 25
M Erste Schritte Anderes Projekt Migrieren Java Basics - Anfänger-Themen 2
M Enums, oder doch was anderes? Java Basics - Anfänger-Themen 7
V Objekt löschen wenn anderes gelöscht wurde Java Basics - Anfänger-Themen 11
M Rausfinden welches Objekt ein anderes Objekt erzeugt hat?! Java Basics - Anfänger-Themen 3
S BufferedReader liest was anderes als BufferedWriter schreibt Java Basics - Anfänger-Themen 5
B Casten oder vielleicht was anderes? Java Basics - Anfänger-Themen 9
Z Fokus auf anderes Programm setzen Java Basics - Anfänger-Themen 3
D Ein Objekt erzeugt ein anderes Objekt - Wie beide Objekte abspeichern? Java Basics - Anfänger-Themen 5
-horn- Anderes Programm (C,C++, etc) prüfen lassen, ob JAVA installiert ist und wo? Java Basics - Anfänger-Themen 5
A [gelöst]Aus der Klasse heraus auf ein anderes Objekt zugreifen Java Basics - Anfänger-Themen 4
F Anderes Programm beenden Java Basics - Anfänger-Themen 3
S Anderes Fenster schließen Java Basics - Anfänger-Themen 8
C Oberfläche & anderes Java Basics - Anfänger-Themen 6
C array in anderes kopieren ohne zu überschreiben . Java Basics - Anfänger-Themen 13
D Auf anderes Fenster Warten Java Basics - Anfänger-Themen 6
G Frame Applet oder doch was anderes Java Basics - Anfänger-Themen 2
G Was anderes als Scanner Java Basics - Anfänger-Themen 4
T Anderes Fenster öffnen, darin enthaltene Komponenten ändern Java Basics - Anfänger-Themen 2
G Aus Programm anderes Programm starten Java Basics - Anfänger-Themen 2
V Aus einem Lisener ein anderes Programm aufrufen (Übersichtli Java Basics - Anfänger-Themen 6
C Graphics2D auf anderes Graphics2D übertragen Java Basics - Anfänger-Themen 5
G Von einem JinternalFrame auf ein anderes zugreifen! Java Basics - Anfänger-Themen 18
W Hashtable oder was Anderes Java Basics - Anfänger-Themen 8
D Objekt-Variable an anderes Objekt übergeben Java Basics - Anfänger-Themen 9
B 2 d array in ein anderes 2 d array kopieren. ! Java Basics - Anfänger-Themen 8
I Frame schließen, wenn anderes geöffnet wird Java Basics - Anfänger-Themen 2
Dilandau array oder victor oder was ganz anderes? Java Basics - Anfänger-Themen 8
fragenÜber(fragen); Turtle Grafik mit GUI (JFrame) Java Basics - Anfänger-Themen 3
E JFrame + Buffer-strategy Java Basics - Anfänger-Themen 8
I JFrame / Screen auf zweitem (definiertem) Monitor öffnen Java Basics - Anfänger-Themen 3
luggas89 Mit Jframe live zeichnen Java Basics - Anfänger-Themen 4
C mehrere JPanel in ein JFrame bringen Java Basics - Anfänger-Themen 9
B HSQL mit JFrame steuern Java Basics - Anfänger-Themen 4
D Wie Objekte im JFrame frei bewegen lassen? Java Basics - Anfänger-Themen 3
D Erste Schritte png in JFrame anzeigen? Java Basics - Anfänger-Themen 3
D Probleme mit JFrame und der Größe Java Basics - Anfänger-Themen 8
P JFrame, Linien zeichnen, MouseListener Java Basics - Anfänger-Themen 2
S Kontrollieren ob jframe disposed ist Java Basics - Anfänger-Themen 3
Elyt JFrame in den Hintergrund verschieben Java Basics - Anfänger-Themen 3
OSchriever JFrame-Anwendungsfenster verschieben Java Basics - Anfänger-Themen 17
M Bild in JFrame Java Basics - Anfänger-Themen 1
S Klassenaufruf über JFrame Button Java Basics - Anfänger-Themen 3
W 2 JPanel in einem JFrame Java Basics - Anfänger-Themen 4
CptK Interface Klasse Frame (extends JFrame) aus anderer Klasse schließen Java Basics - Anfänger-Themen 7
S JFrame mit Hintergrundbild und Button Java Basics - Anfänger-Themen 4
S JFrame Java Basics - Anfänger-Themen 15
I JFrame proportional verkleinerbar machen Java Basics - Anfänger-Themen 3
B Java JFrame zeichnen Java Basics - Anfänger-Themen 4
ReinerCoder Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
T Auslagern von Methoden bei einem JFrame Java Basics - Anfänger-Themen 6
N Erste Schritte JFrame Caesar-Verschlüsselung Java Basics - Anfänger-Themen 23
B Erste Schritte Objekte von JFrame der Fenstergröße anpassen Java Basics - Anfänger-Themen 3
J JFrame Fenster öffnet sich nicht Java Basics - Anfänger-Themen 7
3 JFrame immer im Hintergrund Java Basics - Anfänger-Themen 1
F Interface JFrame mit if-Abfrage automatisch schließen lassen? Java Basics - Anfänger-Themen 3
R JFrame nicht verschiebbar Java Basics - Anfänger-Themen 2
T Wenn JFrame Textfelder Hintergrund Grün dann... (if) Java Basics - Anfänger-Themen 3
K Java JFrame mit Hintergrundbild erstellen Java Basics - Anfänger-Themen 1
Aruetiise Variablen JFrame und Variablen Java Basics - Anfänger-Themen 3
H Eclipse JFrame Java Basics - Anfänger-Themen 3
C Variablen von einem JFrame in einen anderen übertragen Java Basics - Anfänger-Themen 3
M Bild wird von JFrame nicht geladen Java Basics - Anfänger-Themen 12
K Methoden Methode starten wenn JFrame geöffnet wird Java Basics - Anfänger-Themen 2
D Erste Schritte JFrame Inhalte werden nicht angezeigt Java Basics - Anfänger-Themen 8
A Variablen In anderer Klasse auf Objekte von JFrame zugreifen Java Basics - Anfänger-Themen 1
B Ist MyFrame oder JFrame besser? Java Basics - Anfänger-Themen 3
Y JFrame sichtbarkeit Java Basics - Anfänger-Themen 4
KeVoZ_ Label auf JFrame willkürlich Positionieren Java Basics - Anfänger-Themen 2
Dechasa Interface JFrame mit mehreren Übereinander liegenden JPanel Java Basics - Anfänger-Themen 5
P JFrame nur einmal öffnen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben