JCheckBox in DialogBox (JOptionPane) einbinden?

Von: , Frage gestellt am Mo, 5. Mär 2007

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!

4 Antworten zu dieser Frage

  1. Antwort von nach 2 Stunden 0 hilfreich
    Re: JCheckBox in DialogBox (JOptionPane) einbinden

    Hallo,

    mach doch ein eigenes Dialogfeld mit JDialog!

    Mfg Sebastian

    • Antwort von nach 5 Stunden 0 hilfreich
      Re^2: JCheckBox in DialogBox (JOptionPane) einbind

      Hallo,

      mach doch ein eigenes Dialogfeld mit JDialog!

      Mfg Sebastian
      Geht das denn nicht auch einfacher ?

  2. Antwort von nach 9 Stunden 0 hilfreich
    Re: JCheckBox in DialogBox (JOptionPane) einbinden

    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.

    • Antwort von nach 15 Stunden 1 hilfreich
      Re^2: JCheckBox in DialogBox (JOptionPane) einbind

      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!!

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!