JCheckBox in DialogBox (JOptionPane) einbinden?

Ich bin im Moment gerade dabei eine Stand-alone Applikation mit GUI
in Java zu entwickeln. Bei dieser Applikation kann der Benutzer
diverse Einstellungen vornehmen, welche dann in eine Datei
gespeichert werden und bei Bedarf ausgelesen werden, sodass eben
diese Einstellungen beibehalten werden (zB LAF, verwendeter
Programmordner, etc.).

Wenn der Benutzer die Applikation beendet erscheint eine DialogBox
(JOptionPane) welche den Benutzer fragt, ob der die Anwendung
wirklich schließen will.
if (JOptionPane.showConfirmDialog(this, „Möchten Sie wirklich
aufhören“,
„Frage“, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE)
== JOptionPane.YES_OPTION) {
System.exit(0);

Ich möchte in diese DialogBox eine CheckBox einbauen, die man anhaken
kann (z.B.: [] in Zukunft nicht mehr nachfragen ), wenn man nicht mehr gefragt werden will.

Meine Frage:
Wie bekommt man eine CheckBox (JCheckBox ?!) in die Dialogbox und wie
liest man den Status der CheckBox aus (angehakt oder nicht)???

Denn das Ergebnis dieser CheckBox möchte ich dann in die Datei abspeichern lassen!
Vielen Dank im voraus!

Hallo,

mach doch ein eigenes Dialogfeld mit JDialog!

Mfg Sebastian

Hallo,

mach doch ein eigenes Dialogfeld mit JDialog!

Mfg Sebastian

Geht das denn nicht auch einfacher ?

Hallo Stefan.

Wenn der Benutzer die Applikation beendet erscheint eine
DialogBox
(JOptionPane) welche den Benutzer fragt, ob der die Anwendung
wirklich schließen will.

Ich möchte in diese DialogBox eine CheckBox einbauen

Wie bekommt man eine CheckBox (JCheckBox ?!) in die Dialogbox

Ein Blick in die Dokumentation der JOptionPane (http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/…)
verrät, dass man Ihr statt einer Textnachricht eine beliebige
Komponente zur Anzeige übergeben
kann. Damit lässt sich dem
Dialog prima eine komplexere GUI-Komponente wie z.B. ein
selbstgebasteltes CheckBoxPanel unterschieben.

wie liest man den Status der CheckBox aus (angehakt oder nicht)???

Indem Du einen ActionListener an die JCheckBox hängst.

Müssig ist alle Theorie, also hier Butter bei die Fische:

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class CheckBoxPanel extends JPanel {
 public CheckBoxPanel() {
 JCheckBox chkNervMichNicht = new JCheckBox("In Zukunft nicht mehr fragen");
 chkNervMichNicht.addActionListener(new ActionListener() {
 public void actionPerformed(ActionEvent e) {
 Object eventSource = e.getSource();
 if (eventSource instanceof JCheckBox) {
 JCheckBox myCheckBox = (JCheckBox)eventSource;
 if (myCheckBox.isSelected()) {
 System.out.println("SPEICHERN: Nicht mehr nerven");
 } else {
 System.out.println("SPEICHERN: Weiter nerven");
 }
 }
 }
 });

 this.setLayout(new GridBagLayout());
 GridBagConstraints constraints = null;

 constraints = new GridBagConstraints();
 constraints.gridx = 0;
 constraints.gridy = 0;
 constraints.gridwidth = 1;
 constraints.gridheight = 1;
 constraints.weightx = 0;
 constraints.weighty = 0;
 constraints.ipadx = 2;
 constraints.ipady = 2;
 constraints.insets = new Insets(0,0,0,0);
 constraints.anchor = GridBagConstraints.CENTER;
 constraints.fill = GridBagConstraints.NONE;
 this.add(new JLabel("Möchten Sie die Anwendung wirklich beenden?"), constraints);

 constraints = new GridBagConstraints();
 constraints.gridx = 0;
 constraints.gridy = 1;
 constraints.gridwidth = 1;
 constraints.gridheight = 1;
 constraints.weightx = 0;
 constraints.weighty = 0;
 constraints.ipadx = 2;
 constraints.ipady = 2;
 constraints.insets = new Insets(0,0,0,0);
 constraints.anchor = GridBagConstraints.CENTER;
 constraints.fill = GridBagConstraints.NONE;
 this.add(chkNervMichNicht, constraints);
 }

 public static void main(String[] args) {
 CheckBoxPanel checkboxPanel = new CheckBoxPanel();
 JOptionPane.showConfirmDialog(null, checkboxPanel, "Anwendung schliessen?", JOptionPane.OK\_CANCEL\_OPTION);
 }
}

Gruss,
-Andreas.

Vielen Dank für die Antwort!

Ein Blick in die Dokumentation der JOptionPane
(http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/…)
verrät, dass man Ihr statt einer Textnachricht eine
beliebige
Komponente zur Anzeige übergeben
kann. Damit lässt sich
dem
Dialog prima eine komplexere GUI-Komponente wie z.B. ein
selbstgebasteltes CheckBoxPanel unterschieben.

Ich hab in die Doku geschaut, aber war mir halt trotzdem nicht ganz klar…

Mittlerweile habe ich auch per E-Mail eine Antwort erhalten. Und wenn man das ganze auf das wesentliche reduziert kommt das raus:

JCheckBox askAgain = new JCheckBox(„In Zukunft nicht mehr fragen.“);
Object[] message = new Object[2];
message[0] = „Möchten Sie wirklich aufhören?“;
message[1] = askAgain;
int result = JOptionPane.showConfirmDialog(this,message);
if (askAgain.isSelected()) {
//Zustand in Datei speichern, dass in Zukunft nicht mehr nachgefragt werden soll.
}
switch(result)
{
case JOptionPane.YES_OPTION:
System.exit(0);
break;
case JOptionPane.NO_OPTION:
System.out.println(„User dont’t want to quit“);
break;
case JOptionPane.CANCEL_OPTION:
System.out.println(„User Canceled Dialog“);
break;
case JOptionPane.CLOSED_OPTION:
System.out.println(„User closed Dialog“);
break;
}

Vielen Dank an dieser Stelle an Heavy! Hat wunderbar funktioniert!!