Fenster schließen bei Klick auf Kreuz

F

FranzFerdinand

Gast
Wunderschönen guten Tag,

ich habe eine Menge dazu gegooglet, aber keine seriöse Lösung gefunden.
Ich hätte gerne, dass Java beim Klicken auf das Kreuz oben Rechts nicht sofort alles schließt, sondern nachfragt, ob der Nutzer das schließen möchte. Mit Ja oder Nein-Klick.

Das ist mein aktueller Quellcode:
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 09.10.2014
  * @author 
  */

public class CafeRoot extends JFrame {
  // Anfang Attribute
  private JLabel jLabelRestkartenTisch = new JLabel();
  private JLabel jLabelRestkartenGast = new JLabel();
  private JLabel jLabelRestbarplaetze = new JLabel();
  private JLabel jLabelHandkartenSpieler1 = new JLabel();
  private JLabel jLabelHandkartenSpieler2 = new JLabel();
  private JLabel jLabelPunkteSpieler1 = new JLabel();
  private JLabel jLabelPunkteSpieler2 = new JLabel();
  private JLabel jLabelSpieler = new JLabel();
  // Ende Attribute
  
  public CafeRoot(String title) { 
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    
    int frameWidth = 500; 
    int frameHeight = 350;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setResizable(false);
    Container cp = getContentPane();
    setTitle("Café International");
    
    //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    //Notiz: Denke an eine Abfrage, ob das Programm beendet werden solle!
    setLocationRelativeTo(null);
    cp.setLayout(null);
    
    // Anfang Komponenten
    int restkartentisch = 24;
    jLabelRestkartenTisch.setBounds(25, 10, 100, 30);
    jLabelRestkartenTisch.setText("Resttische: "+restkartentisch);
    cp.add(jLabelRestkartenTisch);
    //=============================
    int restkartengast = 100;
    jLabelRestkartenGast.setBounds(25, 35, 100, 30);
    jLabelRestkartenGast.setText("Restgäste: "+restkartengast);
    cp.add(jLabelRestkartenGast);
    //=============================
    int restbarplaetze = 21;
    jLabelRestbarplaetze.setBounds(25, 60, 120, 30);
    jLabelRestbarplaetze.setText("Barplätze übrig: "+restbarplaetze);
    cp.add(jLabelRestbarplaetze);
    //=============================
    int handkartenspieler1 = 0;//werden noch ausgeteilt
    jLabelHandkartenSpieler1.setBounds(25, 85, 140, 30);
    jLabelHandkartenSpieler1.setText("Karten Spieler 1: "+handkartenspieler1);
    cp.add(jLabelHandkartenSpieler1);
    //=============================
    int handkartenspieler2 = 0;
    jLabelHandkartenSpieler2.setBounds(25, 110, 140, 30);
    jLabelHandkartenSpieler2.setText("Karten Spieler 2: "+handkartenspieler2);
    cp.add(jLabelHandkartenSpieler2);
    //=============================
    int punktespieler1 = 0;
    jLabelPunkteSpieler1.setBounds(25, 135, 140, 30);
    jLabelPunkteSpieler1.setText("Pkt. Spieler 1: "+punktespieler1);
    cp.add(jLabelPunkteSpieler1);
    //=============================
    int punktespieler2 = 0;
    jLabelPunkteSpieler2.setBounds(25, 160, 140, 30);
    jLabelPunkteSpieler2.setText("Pkt. Spieler 2: "+punktespieler2);
    cp.add(jLabelPunkteSpieler2);
    //=============================
    int spieler = 1;
    jLabelSpieler.setBounds(25, 185, 140, 30);
    jLabelSpieler.setText("Am Zug: Spieler "+spieler);
    cp.add(jLabelSpieler);
    // Ende Komponenten
    
    setVisible(true);
  } // end of public CafeRoot
  
  // Anfang Methoden
  
  // Ende Methoden
  
  public static void main(String[] args) {
    new CafeRoot("CafeRoot");
  } // end of main 
  
} // end of class CafeRoot

kann mir da jemand eine Vorlage oder eine seriöse Idee nennen? bitte keine Meckere, ja ich habe keine Ahnung, deshalb frage ich ja nach. ;)

Vielen Dank.

Grüße
FranzFerdinand
 
Zuletzt bearbeitet von einem Moderator:

Faberix

Mitglied
Hallo,

Das kannst du mit einem WindowListener machen:

Java:
public class MyWindowListener implements WindowListener {

private CafeRoot cRoot;

public MyWindowListener(CafeRoot cRoot) {
        this.cRoot = cRoot;
}

@Override
	public void windowActivated(WindowEvent arg0) {
		
	}

	@Override
	public void windowClosed(WindowEvent arg0) {
		cRoot.frame.setVisible(false)
 //            was du noch machen willst
	}

	@Override
	public void windowClosing(WindowEvent arg0) {
		
	}

	@Override
	public void windowDeactivated(WindowEvent arg0) {
		
	}

	@Override
	public void windowDeiconified(WindowEvent arg0) {
		
	}

	@Override
	public void windowIconified(WindowEvent arg0) {
		
	}

	@Override
	public void windowOpened(WindowEvent arg0) {
		
	}
}


Den kannst du dann mit frame.addWindowListener(WindowListener listener); zu deinem JFrame hinzufügen. Ach ja, und du musst bei setDefoultCloseOperation() "JFrame.DO_NOTHING_ON_CLOSE" nehmen.

mfg, Faberix
 

arilou

Bekanntes Mitglied
Und wenn dir das zu viel Code ist, kannst du statt
"implements WindowListener"
auch
"extends WindowAdapter"
nehmen, spart die ganzen leeren Methoden, und du brauchst nur die überschreiben, mit denen du wirklich was machen willst... :bae:

Ach ja, für dein konkreten Problem ist wohl die
.windowClosing
die richtige.
 
Zuletzt bearbeitet:

X5-599

Top Contributor
Hier mal eine Platzsparende Variante ohne extra Klasse. Kleines Beispiel:

Java:
public static void main(String[] args)
{
	final JFrame f = new JFrame("Ein Frame zum Schließen");
	f.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
	f.addWindowListener(new WindowAdapter() {
		@Override
		public void windowClosing(WindowEvent evt)
		{
			int auswahl = JOptionPane.showConfirmDialog(f, "Wirklich beenden?");
			if(auswahl == JOptionPane.YES_OPTION)
			{
				f.dispose();
			}
		}
	});
	f.setVisible(true);
}
 
F

FranzFerdinand

Gast
Wunderschönen Guten Abend,

vielen Dank für eure Hilfe. Ich probiere das sofort aus, wenn ich Zugriff darauf habe und berichte davon.
Mir funkt nur gerade generell ein kleines Problem dazwischen. Ich hab zuhause auf dem Mac und in der Schule auf dem Steinzeit-Windoof unterschiedliche Java-Editor-Programme und habe die Datei vorhin in der Schule bearbeitet, krieg es heute in Eclipse zuhause aber nicht mehr zum laufen.

Ich hab jetzt im Verzeichnis die Dateien:
CafeRoot.~ava
CafeRoot.~fm
CafeRoot.class
CafeRoot.java
CafeRoot.jfm

Aber ich krieg da in Eclipse nichts zum laufen, komme mit dem Import irgendwie nicht hinterher.

Entschuldigt meine sehr amateurbelastete Frage, ich hab sonst nie zu Hause programmiert und komm nun mit diesem ständigen Hin-Her-Wechsel nicht klar.

Kann mir da mal jemand kurz sagen, wie ich das anstelle?

Schöne Grüße
FranzFerdinand :)
 
F

FranzFerdinand

Gast
@Faberix: Ich hab Deine Variante mal als erstes ausprobiert, mein Quelltext sieht nun folgendermaßen aus:
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 09.10.2014
  * @author 
  */

public class CafeRoot extends JFrame {
  // Anfang Attribute
  private JLabel jLabelRestkartenTisch = new JLabel();
  private JLabel jLabelRestkartenGast = new JLabel();
  private JLabel jLabelRestbarplaetze = new JLabel();
  private JLabel jLabelHandkartenSpieler1 = new JLabel();
  private JLabel jLabelHandkartenSpieler2 = new JLabel();
  private JLabel jLabelPunkteSpieler1 = new JLabel();
  private JLabel jLabelPunkteSpieler2 = new JLabel();
  private JLabel jLabelSpieler = new JLabel();
  // Ende Attribute
  
  public CafeRoot(String title) { 
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    
    int frameWidth = 500; 
    int frameHeight = 350;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setResizable(false);
    Container cp = getContentPane();
    setTitle("Café International");
    
    setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    
    //Notiz: Denke an eine Abfrage, ob das Programm beendet werden solle!
    setLocationRelativeTo(null);
    cp.setLayout(null);
    
    // Anfang Komponenten
    int restkartentisch = 24;
    jLabelRestkartenTisch.setBounds(25, 10, 100, 30);
    jLabelRestkartenTisch.setText("Resttische: "+restkartentisch);
    cp.add(jLabelRestkartenTisch);
    //=============================
    int restkartengast = 100;
    jLabelRestkartenGast.setBounds(25, 35, 100, 30);
    jLabelRestkartenGast.setText("Restgäste: "+restkartengast);
    cp.add(jLabelRestkartenGast);
    //=============================
    int restbarplaetze = 21;
    jLabelRestbarplaetze.setBounds(25, 60, 120, 30);
    jLabelRestbarplaetze.setText("Barplätze übrig: "+restbarplaetze);
    cp.add(jLabelRestbarplaetze);
    //=============================
    int handkartenspieler1 = 0;//werden noch ausgeteilt
    jLabelHandkartenSpieler1.setBounds(25, 85, 140, 30);
    jLabelHandkartenSpieler1.setText("Karten Spieler 1: "+handkartenspieler1);
    cp.add(jLabelHandkartenSpieler1);
    //=============================
    int handkartenspieler2 = 0;
    jLabelHandkartenSpieler2.setBounds(25, 110, 140, 30);
    jLabelHandkartenSpieler2.setText("Karten Spieler 2: "+handkartenspieler2);
    cp.add(jLabelHandkartenSpieler2);
    //=============================
    int punktespieler1 = 0;
    jLabelPunkteSpieler1.setBounds(25, 135, 140, 30);
    jLabelPunkteSpieler1.setText("Pkt. Spieler 1: "+punktespieler1);
    cp.add(jLabelPunkteSpieler1);
    //=============================
    int punktespieler2 = 0;
    jLabelPunkteSpieler2.setBounds(25, 160, 140, 30);
    jLabelPunkteSpieler2.setText("Pkt. Spieler 2: "+punktespieler2);
    cp.add(jLabelPunkteSpieler2);
    //=============================
    int spieler = 1;
    jLabelSpieler.setBounds(25, 185, 140, 30);
    jLabelSpieler.setText("Am Zug: Spieler "+spieler);
    cp.add(jLabelSpieler);
    // Ende Komponenten
    
    setVisible(true);
  } // end of public CafeRoot
  
  // Anfang Methoden
  
  // Ende Methoden
  
  public static void main(String[] args) {
    new CafeRoot("CafeRoot");
  } // end of main 
  public class MyWindowListener implements WindowListener {
	  
	  private CafeRoot cRoot;
	   
	  public MyWindowListener(CafeRoot cRoot) {
	          this.cRoot = cRoot;
	  }
	   
	  @Override
	  	public void windowActivated(WindowEvent arg0) {
	   
	  	}
	   
	  	@Override
	  	public void windowClosed(WindowEvent arg0) {
	  		cRoot.jFrame.setVisible(false);
	   //            was du noch machen willst
	  	}
	   
	  	@Override
	  	public void windowClosing(WindowEvent arg0) {
	   
	  	}
	   
	  	@Override
	  	public void windowDeactivated(WindowEvent arg0) {
	   
	  	}
	   
	  	@Override
	  	public void windowDeiconified(WindowEvent arg0) {
	   
	  	}
	   
	  	@Override
	  	public void windowIconified(WindowEvent arg0) {
	   
	  	}
	   
	  	@Override
	  	public void windowOpened(WindowEvent arg0) {
	   
	  	}
	  }
  frame.addWindowListener(WindowListener listener) {
  }
} // end of class CafeRoot


Bei
Java:
public void windowClosed(WindowEvent arg0) {
	  		cRoot.jFrame.setVisible(false);
	   //            was du noch machen willst

zeigt er noch an: jFrame kann nicht aufgelöst werden oder ist kein Feld. Ich hab den Kommentar mal dagelassen, damit man die Textstelle leichter im Text findet.

Und ganz unten:
frame.addWindowListener(WindowListener listener) ;

Hier steht:
Diese Zeile enthält Mehrfachmarkierungen:
- Diese Stelle erfordert einen Hauptteil anstelle eines Semikolons (ich müsste also {} schreiben und da was mir unbekanntes einfügen?)
- Rückgabetyp für die Methode fehlt
- Syntaxfehler bei Token addWindowListener

Vielen Dank für die Hilfe. :)
 
Zuletzt bearbeitet von einem Moderator:

Harry Kane

Top Contributor
1. Bitte java-tags benutzen!!!
2.
Java:
cRoot.jFrame.setVisible(false)
geht nur wenn cRoot ein öffentliches Feld mit Namen jframe hat. Hat es aber nicht. Wenn du cRoot sichtbar machen möchtest, warum nicht einfach
Java:
cRoot.setVisible(false)
3.
Java:
frame.addWindowListener(WindowListener listener)
ist Kuddelmuddel. "frame.addWindowListener(" sieht so aus, also sollte es ein Methodenaufruf sein, aber "(WindowListener listener)" ist ein Parameterdeklaration im Methodenkopf!
Schreibe einfach irgendwo in deiner CafeRoot-Klasse, z. B. im Konstruktor, folgendes:
Java:
addWindowListener(new MyWindowListener(this));
und schmeiß die deine Kuddelmuddel-Zeile weg.
4. Nicht von JFrame ableiten, wenn du seine Funktionalität nicht erweiterterst, sondern ihn nur nutzt.
 
F

FranzFerdinand

Gast
Einen wunderschönen guten Tag,

vielen Dank für Deinen Beitrag. Entschuldige bitte das nichtverwenden von Javatags, wusste nicht, dass sowas existiert, hab deshalb immer nur CODE benützt. :)

Das ist aktuell mein Programmcode:
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 09.10.2014
  * @author 
  */

public class CafeRoot extends JFrame {
  // Anfang Attribute
  private JLabel jLabelRestkartenTisch = new JLabel();
  private JLabel jLabelRestkartenGast = new JLabel();
  private JLabel jLabelRestbarplaetze = new JLabel();
  private JLabel jLabelHandkartenSpieler1 = new JLabel();
  private JLabel jLabelHandkartenSpieler2 = new JLabel();
  private JLabel jLabelPunkteSpieler1 = new JLabel();
  private JLabel jLabelPunkteSpieler2 = new JLabel();
  private JLabel jLabelSpieler = new JLabel();
  // Ende Attribute
  
  public CafeRoot(String title) { 
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    
    int frameWidth = 500; 
    int frameHeight = 350;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setResizable(false);
    Container cp = getContentPane();
    setTitle("Café International");
    
    setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    //Notiz: Denke an eine Abfrage, ob das Programm beendet werden solle!
    setLocationRelativeTo(null);
    cp.setLayout(null);
    
    // Anfang Komponenten
    int restkartentisch = 24;
    jLabelRestkartenTisch.setBounds(25, 10, 100, 30);
    jLabelRestkartenTisch.setText("Resttische: "+restkartentisch);
    cp.add(jLabelRestkartenTisch);
    //=============================
    int restkartengast = 100;
    jLabelRestkartenGast.setBounds(25, 35, 100, 30);
    jLabelRestkartenGast.setText("Restgäste: "+restkartengast);
    cp.add(jLabelRestkartenGast);
    //=============================
    int restbarplaetze = 21;
    jLabelRestbarplaetze.setBounds(25, 60, 120, 30);
    jLabelRestbarplaetze.setText("Barplätze übrig: "+restbarplaetze);
    cp.add(jLabelRestbarplaetze);
    //=============================
    int handkartenspieler1 = 0;//werden noch ausgeteilt
    jLabelHandkartenSpieler1.setBounds(25, 85, 140, 30);
    jLabelHandkartenSpieler1.setText("Karten Spieler 1: "+handkartenspieler1);
    cp.add(jLabelHandkartenSpieler1);
    //=============================
    int handkartenspieler2 = 0;
    jLabelHandkartenSpieler2.setBounds(25, 110, 140, 30);
    jLabelHandkartenSpieler2.setText("Karten Spieler 2: "+handkartenspieler2);
    cp.add(jLabelHandkartenSpieler2);
    //=============================
    int punktespieler1 = 0;
    jLabelPunkteSpieler1.setBounds(25, 135, 140, 30);
    jLabelPunkteSpieler1.setText("Pkt. Spieler 1: "+punktespieler1);
    cp.add(jLabelPunkteSpieler1);
    //=============================
    int punktespieler2 = 0;
    jLabelPunkteSpieler2.setBounds(25, 160, 140, 30);
    jLabelPunkteSpieler2.setText("Pkt. Spieler 2: "+punktespieler2);
    cp.add(jLabelPunkteSpieler2);
    //=============================
    int spieler = 1;
    jLabelSpieler.setBounds(25, 185, 140, 30);
    jLabelSpieler.setText("Am Zug: Spieler "+spieler);
    cp.add(jLabelSpieler);
    // Ende Komponenten
    
    setVisible(true);
    addWindowListener(new MyWindowListener(this));
  } // end of public CafeRoot
  
  // Anfang Methoden
  
  // Ende Methoden
  
  public static void main(String[] args) {
    new CafeRoot("CafeRoot");
  } // end of main 
  public class MyWindowListener implements WindowListener {
	  
	  private CafeRoot cRoot;
	   
	  public MyWindowListener(CafeRoot cRoot) {
	          this.cRoot = cRoot;
	  }
	   
	  @Override
	  	public void windowActivated(WindowEvent arg0) {
	   
	  	}
	   
	  	@Override
	  	public void windowClosed(WindowEvent arg0) {
	  		cRoot.setVisible(false);
	   //            was du noch machen willst
	  	}
	   
	  	@Override
	  	public void windowClosing(WindowEvent arg0) {
	   
	  	}
	   
	  	@Override
	  	public void windowDeactivated(WindowEvent arg0) {
	   
	  	}
	   
	  	@Override
	  	public void windowDeiconified(WindowEvent arg0) {
	   
	  	}
	   
	  	@Override
	  	public void windowIconified(WindowEvent arg0) {
	   
	  	}
	   
	  	@Override
	  	public void windowOpened(WindowEvent arg0) {
	   
	  	}
	  }
} // end of class CafeRoot

Alle Fehlermeldungen sind weg, aber es passiert trotzdem rein gar nichts. Wenn ich auf Kreuz klicke schließt sich nichts und es kommt auch keine Meldung. Dass sich nichts schließt ist aufgrund von
Java:
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
ja auch logisch. Aber ich weiß jetzt nicht so Recht, was ich da ändern solle.

Gruß
Lukas
 

arilou

Bekanntes Mitglied
Java:
// [...]
		@Override
		public void windowClosing(WindowEvent evt)
		{
			int auswahl = JOptionPane.showConfirmDialog(cRoot, "Wirklich beenden?");
			if(auswahl == JOptionPane.YES_OPTION)
			{
				cRoot.dispose();
			}
		}
Du solltest z.B. X5-599's Code auch einbauen...
Was nützen Tipps und Ratschläge, wenn Du sie nicht verwendest?
 
Zuletzt bearbeitet:
F

FranzFerdinand

Gast
Hallo,

ja das hab ich auch gerade gesehen, da passiert ja an der Stelle gar nichts. Hab das jetzt so eingebaut. Vor den Code muss natürlich noch eine Zeile, die den Frame entsprechend einfügt, hab ich nun auch gemacht.
da steht nun
Java:
@Override
		public void windowClosing(WindowEvent evt)
		{
	  		final JFrame f = new JFrame("Ein Frame zum Schließen");
			int auswahl = JOptionPane.showConfirmDialog(f, "Wirklich beenden?");
			if(auswahl == JOptionPane.YES_OPTION)
			{
				cRoot.dispose();
			}
		}

Ähm, ich hab gesehen, dass Du gerade Deinen Beitrag verändert hast. Der Code funktioniert auch. Ich habs nun nach der anderen Variante gemacht, klappt ja auch.

Ich habe euch zu danken, für die nette Hilfe, auch wenn ich sehr stark Amateurmäßig da ran gegangen bin.
Es hilft ja auch nichts, wenn ihr mir hier ganze Codeschnipsel präsentiert und ich danach immer denke: Ach, verdammte Axt, jetzt funktioniert es, aber ich hab keine Ahnung, was da überhaupt gemacht wird.

Ich hab mir den Code angeguckt und verstehe ihn nun auch. :)

Vielen Herzlichen Dank, das hilft mir eine ganze Ecke weiter.
Schönes Wochenende
FranzFerdinand

PS: mal so eine Frage. Ist das hier Gang und Gebe, dass man regelmäßig diesen Dankebutton drückt? Ich find das immer ein Wenig albern unter alles "Gefällt mir", +1, Danke schön oder sowas zu klicken, ich bedanke mich einfach und gut ist. Hab mal aus Höflichkeit und Dank überall Daumen hoch gedrückt. Gehört das hier zum Guten Umgang oder kann man das auch ausblenden?
 
Zuletzt bearbeitet von einem Moderator:
F

FranzFerdinand

Gast
Sodele, entschuldigt die Störung, eine Frage hätte ich da noch, bezüglich der Kosmetik des Codes sowie des Fensters.
Da steht jetzt Abbrechen, Ja und Nein. Abbrechen und Nein erfüllen ja so ziemlich den gleichen Zweck. Kann ich Abbrechen irgendwie wegstreichen? Der Code ist irgendwie so kurz, dass ich mir nicht erschließen kann, wieso das überhaupt da steht. Ich erkenne nur, welcher Befehl den Ja-Button erzeugt. Bzw. ähm
Java:
showConfirmDialog
erzeugt wahrscheinlich gleich alle drei Buttons denk ich mal?


So sieht die Codestelle nun aus:
Java:
@Override
		public void windowClosing(WindowEvent evt)
		{
	  		final JFrame Beenden = new JFrame("Ein Frame zum Schließen");
	  		Beenden.setTitle("Programm beenden");
			int auswahl = JOptionPane.showConfirmDialog(Beenden, "Wollen Sie das Programm wirklich beenden?");
			if(auswahl == JOptionPane.YES_OPTION)
			{
				cRoot.dispose();
			}
		}

So und im Titel des kleinen neuen Fensters steht immer "Select an Option". Ich wollte das durch setTitle wie ihr sehen könnt abändern, aber da ändert sich nichts, steht immer noch da.
=====
Und wenn ich dann Ja auf Schließen klicke, schließt sich nur das Fenster, aber Java selbst bleibt unten in der Leiste. Das war sonst nie so. Wenn ich Fünf mal das Programm aufmache und über den Dialog schließe, hab ich am Ende fünf mal java offen.:shock:
--------
Das hab ich behoben bekommen. ;) System.exit(0); anstatt von dispose wirkt Wunder :)
=====

Gruß
FranzFerdinand
 
Zuletzt bearbeitet von einem Moderator:

Joose

Top Contributor
Da steht jetzt Abbrechen, Ja und Nein. Abbrechen und Nein erfüllen ja so ziemlich den gleichen Zweck. Kann ich Abbrechen irgendwie wegstreichen?

Es gibt bei JOptionPane mehrere Möglichkeiten eine Dialog anzuzeigen, bei einem kann man auch festlegen welche Buttons angezeigt werden.

Abbrechen und Nein können schon eine unterschiedliche Bedeutung haben!
Frage: Wollen sie das Programm beenden ohne die Änderungen zu speichern?
Ja - Änderungen werden verworfen
Nein - User die Möglichkeit geben die Änderungen zu speichern und dann wird das Programm geschlossen
Abbrechen - Dialog beenden und Programm nicht beenden

Was du aber machst bleibt natürlich dir überlassen.
 
F

FranzFerdinand

Gast
In meinem Zwecke sind Nein und Abbrechen, das gleiche, sonst hätte ich ja wohl nicht gefragt.
Ich hab nen feschen Wikiartikel zu dem Thema gefunden und konnte nun alle Probleme bewältigen!

So sieht es nun aus:
Java:
final JFrame Beenden = new JFrame("Ein Frame zum Schließen");
	  		Beenden.setTitle("Programm beenden");
	  		int beenden = JOptionPane.showConfirmDialog(null,
                    "Wollen Sie das Programm wirklich beenden?\nIhr Spielstand wird verloren gehen!",
                    "Café International Beenden?",
                    JOptionPane.WARNING_MESSAGE,
                    JOptionPane.YES_NO_OPTION);
			if(beenden == JOptionPane.YES_OPTION)
			{
				//cRoot.dispose();
				System.exit(0);
			}

Vielen Dank und noch einen schönen Abend!

Bussy
FranzFerdinand
 

Joose

Top Contributor
Das war mir schon klar, wollte dir aber eben ein Beispiel geben wie man hier doch zwischen diesen beiden Optionen unterscheiden kann.

Freut mich zu hören das nun alles klappt :)
 
F

FranzFerdinand

Gast
Ich möchte noch mal kurz Informieren, wie es aktuell aus sieht. Ich hab das nochmal schön umgeformt. Bisher hatte ich Einfach Ja oder Nein, falls ich irgendwie vor habe einen dritten Button einzubauen bin ich nun variabel.
Java:
Beenden.setTitle("Programm beenden");
      Object[] options = {"OK", "Cancel", "Ja", "Nein", "Egal"};
      int beenden = JOptionPane.showOptionDialog(null,
                                                 "Wollen Sie das Programm wirklich beenden?\nIhr Spielstand wird verloren gehen!",
                                                 "Café International Beenden?",
                                                 JOptionPane.DEFAULT_OPTION, 
                                                 JOptionPane.INFORMATION_MESSAGE, 
                                                 null, options, options[0]);
      if(beenden == 0)
      {
        //cRoot.dispose();
        System.exit(0);
      }

Der Ruft nun die Liste Options ab und ich kann dann in der If-bedingung einfach auf die Elemente zugreifen. Im Beispiel eben das 0te Element zum schließen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Fenster schließen verhindern Allgemeine Java-Themen 13
M ALT-F4 fenster schließen unterdrücken Allgemeine Java-Themen 2
N Java Fenster schließen Allgemeine Java-Themen 2
G Fenster/Frame schließen Allgemeine Java-Themen 16
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
berserkerdq2 Weiß jemand wie ich im Scenebuilder das Fenster so darstellen kann, dass beim Vollbildmodus die Objekte so angezeigt werden? Allgemeine Java-Themen 1
A Zusammenspiel javafx Fenster Allgemeine Java-Themen 1
M StdDraw-Fenster schliessen Allgemeine Java-Themen 1
D Klassen 2 Fenster in GUI Allgemeine Java-Themen 3
H Hilfe bei Erstellung eines Hilfe Fenster bei Tastendruck (F1 bei Win98) Allgemeine Java-Themen 5
C Durch klicken von Button in GUI wird leeres Fenster geöffnet und nicht mein Spiel "Memory" Allgemeine Java-Themen 13
K Interface Fenster mit Regler Allgemeine Java-Themen 2
S BMI Rechner mit eclipse Visual Editor (Seperates Fenster) Allgemeine Java-Themen 7
P Herausfinden, ob ein Process ein Fenster hat Allgemeine Java-Themen 1
K Doppeltes Fenster Allgemeine Java-Themen 3
F DOS-Fenster unterdrücke? Allgemeine Java-Themen 0
A Anderes Fenster neu laden Allgemeine Java-Themen 16
B Geöffnetes Fenster verifizieren Allgemeine Java-Themen 2
T LookAndFeel Java Skinning Fenster Allgemeine Java-Themen 13
M CapsLock abfragen wenn Fenster wieder aktiviert wird Allgemeine Java-Themen 5
E Prüfen ob Fenster mit Namen offen ist Allgemeine Java-Themen 2
N verdeckte Fenster werden im Vordergrund gezeichnet Allgemeine Java-Themen 6
N Fenster lädt nicht Allgemeine Java-Themen 28
J Zugriff auf Poker-Client Fenster Allgemeine Java-Themen 14
A Erkennen welches Fenster bei windowDeactivated aktiviert wird? Allgemeine Java-Themen 2
S Frage für ein popup Fenster Allgemeine Java-Themen 4
J Swing Wird invisible, nicht-ref. Fenster vom GC entfernt? Allgemeine Java-Themen 11
Z Fenster vergrößern und verkleiern Allgemeine Java-Themen 14
S Fenster "verschwindet" nicht, trotz setVisible(false); Allgemeine Java-Themen 22
A Zeichen beim Eingeben in ein DOS-Fenster nicht anzeigen? Allgemeine Java-Themen 3
J X11 app in Java Fenster Allgemeine Java-Themen 4
R Von Java aus Browser Fenster oeffnen und Webseite ausgeben? Allgemeine Java-Themen 2
H Fenster focus Allgemeine Java-Themen 5
Escorter .jar Datei Classpath mitgeben ohne Dos Fenster Allgemeine Java-Themen 8
ARadauer Fenster suchen und Verschieben Allgemeine Java-Themen 6
G Keyboard Shortcut (bei nicht aktivem fenster) Allgemeine Java-Themen 2
Steev Screenshot vom Bereich behind dem aktuellen Fenster machen Allgemeine Java-Themen 24
D Welches Fenster ist im moment aktiv? Allgemeine Java-Themen 11
T Java Fenster Allgemeine Java-Themen 5
C Fenster öffnen Allgemeine Java-Themen 4
P Login- Fenster Allgemeine Java-Themen 11
B kleines modales transparents Fenster ohne rahmen und buttons Allgemeine Java-Themen 15
J text aus externem fenster lesen Allgemeine Java-Themen 3
F neues fenster Allgemeine Java-Themen 3
P JTabbedPane Fenster minimieren Allgemeine Java-Themen 15
K Warten auf die Eingabe aus Fenster.... Allgemeine Java-Themen 2
M neue Thread in neuem Fenster Allgemeine Java-Themen 3
MQue Fenster aufklappen Allgemeine Java-Themen 3
C Fenster blinken lassen Allgemeine Java-Themen 2
T Explorer-Fenster öffnen mit Java Allgemeine Java-Themen 9
S Windows Fenster finden Allgemeine Java-Themen 9
E Wie bekomme ich mein Image in das Fenster Allgemeine Java-Themen 2
E Mit Button ein Fenster öffnen Allgemeine Java-Themen 4
G Java Fenster öffnen nach Iconklick(desktop) (helppls) Allgemeine Java-Themen 3
G Das aktuelle Fenster drucken Allgemeine Java-Themen 13
G mehrere JPanels als Fenster benutzen Allgemeine Java-Themen 3
S Swing - Problem mit Fenster-/Komponenten-Größe Allgemeine Java-Themen 3
M 2 verschiedene LookAndFeels in einem Fenster möglich? Allgemeine Java-Themen 6
G Leere Fenster (Keine Schrift, Reiter/ Buttons) bei Java Allgemeine Java-Themen 5
F Fenster friert ein! Allgemeine Java-Themen 2
K JAVA Fenster-Modi Allgemeine Java-Themen 5
S fenster umbenennen Allgemeine Java-Themen 4
J Fenster aufpopen lassen? Allgemeine Java-Themen 8
B JNI: HWND von aufrufendem Fenster bekommen. Allgemeine Java-Themen 4
W Fenster (EXCEL) aktivieren Allgemeine Java-Themen 6
J Fenster mit paint Methode selbst zeichnen Allgemeine Java-Themen 3
G Fenster verbinden (docken) Allgemeine Java-Themen 4
L Windows-Fenster "Arbeitsplatz" anzeigen Allgemeine Java-Themen 13
G Auf KeyEvent reagieren, wenn das Fenster nicht aktiv ist Allgemeine Java-Themen 8
C alle Fenster bleiben grau Allgemeine Java-Themen 4
G Fenster durch eigenen Button minimieren Allgemeine Java-Themen 6
P PooledConnection früher schließen oder abarbeitung queuen? wie vorgehen Allgemeine Java-Themen 7
C anderes Programm schließen! Allgemeine Java-Themen 5
MaxG. Swing Frame schließen Allgemeine Java-Themen 9
Tausendsassa Threads Einen Thread sich selbst schließen lassen Allgemeine Java-Themen 17
Tausendsassa Interface Eine Gui von einer anderen schließen lassen Allgemeine Java-Themen 3
A Applet Alle Threads beim schließen des Applets beenden Allgemeine Java-Themen 8
T Methode beim Schließen der xhtml Seite? Allgemeine Java-Themen 4
D Dialog soll sich beim Klick auf Button schließen Allgemeine Java-Themen 8
E externen Prozess schließen, wenn Programm geschlossen wird Allgemeine Java-Themen 2
Landei DDE-Probleme und Programm schließen Allgemeine Java-Themen 2
B Algorythmus Lücke in Sequenz schließen Allgemeine Java-Themen 7
B Applet Destruktor beim Browser schließen? Allgemeine Java-Themen 5
B Öffnen und schließen von Pdf-Files Allgemeine Java-Themen 8
nrg Java Observer in SysTray laufen lassen / Console schließen Allgemeine Java-Themen 2
A HTML-Seite wieder schließen Allgemeine Java-Themen 2
A Java-Anwendung "richtig" schließen ohne JVM zu beenden Allgemeine Java-Themen 2
N JTree nicht genutzte Pfade schließen Allgemeine Java-Themen 2
M Programm schließen? Allgemeine Java-Themen 2
E Alle unter Prozesse der beim schließen mit schließen Allgemeine Java-Themen 3
S GUI komplett schließen und wieder Neu laden? Allgemeine Java-Themen 4
A Problem mit ShutdownHook beim schließen Allgemeine Java-Themen 7
O File zum löschen "schließen" Allgemeine Java-Themen 2
M Programm schließen und wieder neu starten Allgemeine Java-Themen 9
MQue Datei- referenz schließen Allgemeine Java-Themen 5
M Methode vor dem Schließen aufrufen Allgemeine Java-Themen 4
P DockingFrames schließen Allgemeine Java-Themen 2
P Pfad schließen xml Allgemeine Java-Themen 3
W Das schließen des JFrame abfangen, wiei? Allgemeine Java-Themen 6
C externes Programm läuft erst nach schließen des mainprogramm Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben