Fenster richtig schließen

sebby

Mitglied
Ich habe ein Problem, und zwar habe ich ein JDialog-Fenster in dem ich über einen Button ein neues JDialog-Fenster öffne. Wenn ich dieses das erste mal schließe ist das kein Problem. Aber wenn ich das JDialog Fenster ein zweites mal öffne muss ich dieses zwei mal schließen, beim dritten mal öffnen drei mal schließen und so weiter.
Ich schließe die Fenster mit dispose(). Wird hier das Fenster nicht komplett geschlossen? Gibt es eine bessere Variante mit welchem man das eine Fenster schließen kann?
 
G

Gast2

Gast
dispose() ist schon richtig.
Kannst du mal nen KSKB posten wo man den Fehler nachvollziehen kann?
 

sebby

Mitglied
Mein erstes JDialog, hier gibt es keine Probleme. Dieses rufe ich über mein Hauptfenster über einen Button auf.

Java:
import java.awt.event.*;
import java.awt.*;

import javax.swing.*;

public class Kdverwaltungsfenster extends JFrame implements ActionListener{
	private static JLabel jlblKunde = new JLabel("Neuen Kunden anlegen");
	private static JLabel jlblBearbeiten = new JLabel("Bestehenden Kunden bearbeiten oder löschen");
	private static JLabel jlblKNr = new JLabel ("Kunden-Nr.");
	private static JButton neu = new JButton("Anlegen");
	private static JButton bearbeiten = new JButton("bearbeiten/löschen");
	private static JButton ende = new JButton("Schließen");
	private static JTextField jtfKunde = new JTextField();
	private static JPanel jpKdverwaltung = new JPanel();
	private static JFrame jfKdverwaltung = new JFrame();

	public Kdverwaltungsfenster() {
		neu.addActionListener(this);
		bearbeiten.addActionListener(this);
		ende.addActionListener(this);
	}
	
	public static JDialog setKdverwaltung(String text, boolean x) {
        JDialog jdKdverwaltung = new JDialog(jfKdverwaltung, text, x);
        
        jpKdverwaltung.setLayout(null);
        
        jlblKunde.setBounds(20, 45, 160, 25);
		jpKdverwaltung.add(jlblKunde);
		
		neu.setBounds(185, 45, 120, 25);
		jpKdverwaltung.add(neu);
		
		jlblBearbeiten.setBounds(60, 90, 380, 25);
		jlblBearbeiten.setFont(new Font("MS Sans Serif", Font.BOLD, 17));
		jpKdverwaltung.add(jlblBearbeiten);
		
		jlblKNr.setBounds(20, 130, 80, 25);
		jpKdverwaltung.add(jlblKNr);
		jtfKunde.setBounds(105, 130, 160, 25);
		jpKdverwaltung.add(jtfKunde);
		bearbeiten.setBounds(270, 130, 160, 25);
		jpKdverwaltung.add(bearbeiten);
		
		ende.setBounds(20, 180, 130, 25);
		jpKdverwaltung.add(ende);			
		
		jdKdverwaltung.add(jpKdverwaltung);
		new Kdverwaltungsfenster();
        
		jdKdverwaltung.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		jdKdverwaltung.setSize(500,300);
		jdKdverwaltung.setVisible(true);
		return jdKdverwaltung;
	}

	public void actionPerformed(ActionEvent e) {
		Object obj = e.getSource();
		
//		Neuen Kunden anlegen
		if(obj == neu) {
			KundeAnlegen.setBuchAnlegen("Neuen Kunden anlegen", true);
			}
		
//		Kunden bearbeiten bzw. löschen
		if(obj == bearbeiten) {
			System.out.println("Kunde bearbeiten");
		}
		
//		Fenster schließen
		if(obj == ende) {
			jfKdverwaltung.dispose();
		}
	}
	
	public static void main (String[] args) {
		new Kdverwaltungsfenster();
	}
}

Das zweite JDialog, welches ich über das erste Aufrufe. Hier ist der Fehler, dass wenn man das erste JDialog nach dem schließen ein zweites Mal öffnet und dann dieses JDialog öffnet, muss man es zwei mal schliesen.

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class KundeAnlegen extends JFrame implements ActionListener{
	private static JLabel jlblKunde = new JLabel("Neuen Kunden anlegen");
	private static JLabel jlblKundenNr = new JLabel("Kunden-Nr.");
	private static JLabel jlblVorname = new JLabel("Vorname");
	private static JLabel jlblName = new JLabel("Name");
	private static JLabel jlblStrasse = new JLabel ("Strasse");
	private static JLabel jlblPLZ = new JLabel("PLZ");
	private static JLabel jlblOrt = new JLabel("Ort");
	private static JLabel jlblTelefon = new JLabel("Telefon-Nr.");
	private static JButton neu = new JButton("Anlegen");
	private static JButton ende = new JButton("Abbrechen");
	private static JTextField jtfKundenNr = new JTextField();
	private static JTextField jtfVorname = new JTextField();
	private static JTextField jtfName = new JTextField();
	private static JTextField jtfStrasse = new JTextField();
	private static JTextField jtfPLZ = new JTextField();
	private static JTextField jtfOrt = new JTextField();
	private static JTextField jtfTelefon = new JTextField();
	private static JPanel jpKundeanlegen = new JPanel();
	public static JFrame jfKundeanlegen = new JFrame();

	public KundeAnlegen() {
		neu.addActionListener(this);
		ende.addActionListener(this);
	}
	
	public static JDialog setBuchAnlegen(String text, boolean x) {
        JDialog jdKundeanlegen = new JDialog(jfKundeanlegen, text, x);
        
        jpKundeanlegen.setLayout(null);
        
        jlblKunde.setBounds(160, 10, 200, 25);
        jlblKunde.setFont(new Font("MS Sans Serif", Font.BOLD, 17));
        jpKundeanlegen.add(jlblKunde);
        
        jlblKundenNr.setBounds(20, 45, 160, 25);
		jpKundeanlegen.add(jlblKundenNr);
		jtfKundenNr.setBounds(185, 45, 160, 25);
		jpKundeanlegen.add(jtfKundenNr);
		
		jlblVorname.setBounds(20, 75, 160, 25);
		jpKundeanlegen.add(jlblVorname);
		jtfVorname.setBounds(185, 75, 160, 25);
		jpKundeanlegen.add(jtfVorname);
		
		jlblName.setBounds(20, 105, 160, 25);
		jpKundeanlegen.add(jlblName);
		jtfName.setBounds(185, 105, 160, 25);
		jpKundeanlegen.add(jtfName);
		
		jlblStrasse.setBounds(20, 135, 160, 25);
		jpKundeanlegen.add(jlblStrasse);
		jtfStrasse.setBounds(185, 135, 160, 25);
		jpKundeanlegen.add(jtfStrasse);
		
		jlblPLZ.setBounds(20, 165, 160, 25);
		jpKundeanlegen.add(jlblPLZ);
		jtfPLZ.setBounds(185, 165, 160, 25);
		jpKundeanlegen.add(jtfPLZ);
		
		jlblOrt.setBounds(20, 195, 160, 25);
		jpKundeanlegen.add(jlblOrt);
		jtfOrt.setBounds(185, 195, 160, 25);
		jpKundeanlegen.add(jtfOrt);
		
		jlblTelefon.setBounds(20, 225, 160, 25);
		jpKundeanlegen.add(jlblTelefon);
		jtfTelefon.setBounds(185, 225, 160, 25);
		jpKundeanlegen.add(jtfTelefon);
		
		neu.setBounds(20, 270, 130, 25);
		jpKundeanlegen.add(neu);
		
		ende.setBounds(200, 270, 130, 25);
		jpKundeanlegen.add(ende);
		
		jdKundeanlegen.add(jpKundeanlegen);
		new KundeAnlegen();
        
		jdKundeanlegen.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		jdKundeanlegen.setSize(500,400);
		jdKundeanlegen.setVisible(true);
		return jdKundeanlegen;
	}

	public void actionPerformed(ActionEvent e) {
		Object obj = e.getSource();
		
//		Neuen Kunden anlegen
		if(obj == neu) {
			System.out.println("Neuer Kunde");
			}
		
//		Abbrechen
		if(obj == ende) {
			jfKundeanlegen.dispose();
		}
	}
	
	public static void main (String[] args) {
                new KundeAnlegen();
            }
}
 
G

Gast2

Gast
Puh, der Code schaut aber ziemlich wirr aus.
Code:
Kdverwaltungsfenster
erbt von JFrame, hält einen JFrame als Klassenvariable, und erzeugt in der setKdverwaltung nochmal einen Dialog. Irgendwo wird auch nochmal new Kdverwaltungsfenster(); aufgerufen ohne sich dann um das entstehende Objekt zu kümmern.
In der Klasse KundeAnlegen schauts genauso aus.

Da solltest du erstmal etwas ordnung reinbringen.
 

sebby

Mitglied
Das für JDialog habe ich so als Aufbau aus einem Buch, also dass ich dafür einen JFrame benötige. Dass new Kdverwaltungsfenster ist, damit ich den Actionlisener für meine Buttons ausführen kann.
Ich wüsste nicht wie ich es einfacher machen soll, da ich das ja alles benötige, bin aber auch noch ziemlich neu in der Java-Sprache.
Aber das alles funktioniert ja auch, das einzige was ist, ist, dass das zweite Fenster beim erneuten öffnen zwei mal geschlossen werden muss usw.
 

Michael...

Top Contributor
Du erzeugst in deinen statischen set... Methoden neue Objekte von Kundenverwaltung und Kundenanlegen, das ist nicht normal. Und dass diese Methoden statisch sind zeigt, dass Du noch Probleme mit dem Umgang von Objekten bzw. der OOP hast und vom Wissenstand noch gar nicht so weit bist mit (komplexeren) GUIs zu hantieren. Fang doch mal mit etwas einfacherem an. Einer simplen GUI die einen Button hat, der einen Dialog erscheinen lässt.

Ich würde von der Verwendung des Null Layouts abraten und m.M. sollte eine Anwendung auch nur einen JFrame besitzten. Alle anderen Fenster sollte man mittels JDialog abbilden.
 

sebby

Mitglied
Ich habe bisher 2-3 Programme mit einer Gui erstellt, aber auch nur einfach gestrickte. Jetzt will ich etwas mit mehreren Fenstern probieren. Die static Methode habe ich gemacht, damit ich von anderen Klassen darauf zugreifen kann, da ich diese nicht aus der Klasse sondern aus einer Fremd-Klasse aus aufrufen will.
Also habt ihr auch keine Idee voran der Fehler liegen kann?
 
G

Gast2

Gast
Die static Methode habe ich gemacht, damit ich von anderen Klassen darauf zugreifen kann, da ich diese nicht aus der Klasse sondern aus einer Fremd-Klasse aus aufrufen will.
Das deutet wie Michael... schon angedeutet hat darauf hin, dass du noch nicht wirklich Ahnung von OOP hast. Beschäftige dich zunächst erstmal mit Konsolen Programmen. Dann fällt dir das später alles sehr viel leichter.

Dein Code so wie er jetzt darsteht ist einfach total konfus.
 

Michael...

Top Contributor
Also habt ihr auch keine Idee voran der Fehler liegen kann?
Auf die Fehler wurde ja schon mehrfach hingewiesen.

In einer von einem Anfänger geschriebenen nach objektorientierten Ansätzen programmierten Applikation sollte nur eine statische Methode existieren und das ist die static void main(String[])

Hier mal eine simple Dialog Demo:
Java:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class DialogDemo extends JFrame {
	private MyDialog dialog;
	private JLabel label;
	
	public DialogDemo() {
		dialog = new MyDialog(this);
		JButton button = new JButton("Anmelden");
		label = new JLabel("...", JLabel.CENTER);
		this.getContentPane().add(label, BorderLayout.CENTER);
		this.getContentPane().add(button, BorderLayout.SOUTH);
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				dialog.setVisible(true);
				label.setText(dialog.getInput());
			}
		});
	}
	
	class MyDialog extends JDialog {
		private JTextField input;
		
		public MyDialog(JFrame owner) {
			super(owner, true); 
			JButton button = new JButton("OK");
			this.getContentPane().add(input = new JTextField("Bitte Text eigeben"));
			this.getContentPane().add(button, BorderLayout.SOUTH);
			this.setBounds(0, 0, 150, 100);
			this.setLocationRelativeTo(owner);
			button.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					MyDialog.this.dispose();
				}
			});
		}

		public String getInput() {
			return input.getText();
		}
	}
	
	public static void main(String[] args) {
		JFrame frame = new DialogDemo();
		frame.setBounds(0, 0, 500, 300);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Variable von 1. Fenster an 2. Fenster übergeben. Java Basics - Anfänger-Themen 7
javalux123 Keylistener auf andere Fenster Java Basics - Anfänger-Themen 3
T Java FXML selbes Fenster verschiedene Stellen im Programm Java Basics - Anfänger-Themen 5
B Scrollbares Fenster (JScrollPane) mit JPanel scrollt nicht Java Basics - Anfänger-Themen 3
J Überprüfen ob ein Fenster offen ist? Java Basics - Anfänger-Themen 8
T jOptionPane zum schließen von Fenster, wie "Ja" und "Nein" anstatt Yes und No Java Basics - Anfänger-Themen 2
JEP1 Java Dialog Fenster schließen Spiel Java Basics - Anfänger-Themen 0
H Eingabe tätigen bevor Graphics g Fenster öffnet Java Basics - Anfänger-Themen 5
celta_vigo Konsolen-Fenster ist weg Java Basics - Anfänger-Themen 5
Thomathy Interface Wie schließt man ein anderes JFrame Fenster? Java Basics - Anfänger-Themen 6
M PNG als Spieler im Fenster anzeigen Java Basics - Anfänger-Themen 4
S JOptionPane komplett leeres Fenster Java Basics - Anfänger-Themen 4
A Eclipse-Fenster starten statt Konsoleausgabe Java Basics - Anfänger-Themen 2
A Fenster bleibt weiß Java Basics - Anfänger-Themen 7
O Fenster programmieren Java Basics - Anfänger-Themen 2
M JavaFX: Fenster bleibt weiß Java Basics - Anfänger-Themen 3
A Fenster programmieren Java Basics - Anfänger-Themen 1
J JFrame Fenster öffnet sich nicht Java Basics - Anfänger-Themen 7
M aus Fenster anderes Fenster öffnen und wieder umgekehrt Java Basics - Anfänger-Themen 5
J Best Practice DOS Fenster mit Befehlszeile (Lösung) Java Basics - Anfänger-Themen 2
J Fenster wieder unsichtbar machen Java Basics - Anfänger-Themen 2
das_leon Gesamtes Programm in einem Fenster Java Basics - Anfänger-Themen 1
E Knopfdruck neues Fenster öffnen Java Basics - Anfänger-Themen 5
A Fenster mit Button aufrufen Java Basics - Anfänger-Themen 3
D Erste Schritte JPanel verschiebt Fenster via setVisible Java Basics - Anfänger-Themen 5
W Es wird erst gezeichnet, wenn ich das Fenster vergrößere? Java Basics - Anfänger-Themen 20
K Interface Fenster mit 3 ComboBoxen und 1 Button Java Basics - Anfänger-Themen 13
P Erste Schritte durch MenuBar verschiedene Fenster öffnen Java Basics - Anfänger-Themen 2
I Fenster A soll Fenster B schliessen Java Basics - Anfänger-Themen 5
D Java Fenster blockiert ? Java Basics - Anfänger-Themen 5
K Erste Schritte Neues Fenster mit Textinhalt öffnen Java Basics - Anfänger-Themen 6
M Code um per jButton ein neues Fenster zu öffnen Java Basics - Anfänger-Themen 3
A Popup-Fenster Java Basics - Anfänger-Themen 1
L Fenster auf Knopfdruck Java Basics - Anfänger-Themen 3
N Problem mit JOptionPane und Fenster-Fokus Java Basics - Anfänger-Themen 2
J ausgaben von der konsole in das fenster Java Basics - Anfänger-Themen 5
O Finally beim Fenster schliessen Java Basics - Anfänger-Themen 3
F Klassen Zugriff auf Fenster aus versch. Klassen Java Basics - Anfänger-Themen 5
P Eigenes Fenster erstellen Java Basics - Anfänger-Themen 5
M Input/Output Text auf Fenster zeichen Java Basics - Anfänger-Themen 2
T Zu viele Fenster - HILFE! Java Basics - Anfänger-Themen 5
J Extra Fenster (Frame) Java Basics - Anfänger-Themen 20
llabusch Fenster per Button verschieben Java Basics - Anfänger-Themen 5
llabusch Fenster um x Pixel verschieben Java Basics - Anfänger-Themen 4
P Window Builder Reiter im Fenster erstellen Java Basics - Anfänger-Themen 7
S Java Fenster Java Basics - Anfänger-Themen 2
D (zwei) Fenster mit unterschiedlicher Befüllung Java Basics - Anfänger-Themen 11
A JAVA Fenster in ein PDF Konvertieren Java Basics - Anfänger-Themen 1
A Erkennung eines Button im aktiven Fenster Java Basics - Anfänger-Themen 2
B Variable im Fenster anzeigen lassen? Java Basics - Anfänger-Themen 2
S Fenster ist zu groß Java Basics - Anfänger-Themen 8
O GUI: Eigene Fenster "Form"? Java Basics - Anfänger-Themen 13
X JFrame Fenster einzeln schließen Java Basics - Anfänger-Themen 2
E Fehlermeldung und Fenster wird nicht mehr angezeigt Java Basics - Anfänger-Themen 12
I Einlese Abfrage zweier Variablen in einem Fenster Java Basics - Anfänger-Themen 6
F Erste Schritte Aktuelles Fenster durch Event schließen Java Basics - Anfänger-Themen 3
N Java Programm im CMD Fenster öffnen, wie? Java Basics - Anfänger-Themen 17
S Erste Schritte Fenster wechsel im Applet Java Basics - Anfänger-Themen 7
tuttle64 Keine Umlaute im Dos Fenster Java Basics - Anfänger-Themen 12
J Button nimmt das komplette Fenster ein?! Java Basics - Anfänger-Themen 5
M Beim Klicken auf X neues Fenster Java Basics - Anfänger-Themen 4
Athena Schlichtes Fenster mit Windowskomponenten Java Basics - Anfänger-Themen 3
H KeyListener auf ganzes Fenster setzen Java Basics - Anfänger-Themen 14
S Neues Fenster auf Knopfdruck Java Basics - Anfänger-Themen 12
J Button drücken neues Fenster?! Java Basics - Anfänger-Themen 5
A Login Fenster Java Basics - Anfänger-Themen 3
C Button - neues Fenster - Bestellung anzeigen Java Basics - Anfänger-Themen 10
Z GUI-Fenster leeren Java Basics - Anfänger-Themen 5
M Erste Schritte Probleme mit Fenster Schließen Java Basics - Anfänger-Themen 6
J ordentliche Fenster Java Basics - Anfänger-Themen 17
J Problem beim Fenster Java Basics - Anfänger-Themen 4
Z Login Fenster Java Basics - Anfänger-Themen 7
K Aus JFrame-Fenster SuM-Fenster öffnen geht nicht! Java Basics - Anfänger-Themen 8
T Client-Fenster bei Aufruf unvollständig Java Basics - Anfänger-Themen 12
O Größeres Fenster als angegeben?! Java Basics - Anfänger-Themen 2
J Eltern-Fenster ermitteln Java Basics - Anfänger-Themen 2
M Ausklappbares Fenster bei grafischem Taschenrechner Java Basics - Anfänger-Themen 2
V Fenster wird nicht mittig platziert Java Basics - Anfänger-Themen 3
P gui fenster nur einmal aufrufen Java Basics - Anfänger-Themen 5
P Im Fenster bleiben (swing) Java Basics - Anfänger-Themen 16
J Werte ins neue Fenster übertragen Java Basics - Anfänger-Themen 6
M Einfacher Fenster-Ablauf Java Basics - Anfänger-Themen 5
M Timer-Thread in Swing öffnet jedes Mal ein neues Fenster Java Basics - Anfänger-Themen 6
J Zweimal im gleichen Paint-Fenster malen Java Basics - Anfänger-Themen 8
SexyPenny90 Wie erstelle ich ein extra Fenster mit einer Meldung Java Basics - Anfänger-Themen 2
S nur neu geöffnetes Fenster schließen Java Basics - Anfänger-Themen 3
J Willkürlich geöffnetes Fenster/Dialog anspielen? Java Basics - Anfänger-Themen 3
M OOP GUI - Fenster vererben? Java Basics - Anfänger-Themen 9
T fenster schliesen und mouse events in einer nicht abstrakten klasse Java Basics - Anfänger-Themen 6
M Erste Schritte Fenster Und VB Funktionen Java Basics - Anfänger-Themen 8
G Scrollbares Fenster bei mehr als 5 Objekten Java Basics - Anfänger-Themen 4
L Fenster winzig klein durch GridBagLayout Java Basics - Anfänger-Themen 3
R Welcher Layout Manager-für so ein Fenster? Java Basics - Anfänger-Themen 5
H Java-Fenster ohne Inhalt Java Basics - Anfänger-Themen 2
T Windows Fenster Schließen Java Basics - Anfänger-Themen 4
E JFrame Fenster bewegen Java Basics - Anfänger-Themen 8
K Swing Fenster jede sec.neuzeichnen Java Basics - Anfänger-Themen 14
E javaw öffnet trotzdem ein DOS Fenster Java Basics - Anfänger-Themen 15
M Output Input im Cmd Fenster Java Basics - Anfänger-Themen 7
M Neues Fenster Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben