
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

import java.util.Vector;

// Für Radiobutton
import javax.swing.border.*;

// für Table
import javax.swing.table.*;


// 6. Beispiel mit dem Dialogfenster GUI_02
//    Textfelder
//    Radiobutton
//    CheckBox
//  mit Okay Eintrag in einem Editor

// jetzt mit Tabelle und Klasse (toString)

// die Prüfungsform und die Noten werden mit ComboBoxen realisiert



public class GUI_06 extends JFrame {
  JTable _table;
  Vector _liste;

     final String[]
   _names = { "Nachname", "Student", "Prüfungsform", "Note", "Wiederholungsprüfung"};

    JButton BnNew;
    JButton BnEdit;
    JButton BnDelete;
    JButton BnESC;

  public GUI_06() {
    setLocation(200,200);
    setSize(700, 600);
    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    setGUI();
  }

  private void setGUI() {
    setTitle("6. Beispiel, Tabelle mit Dialogfenster, ComboBox");
    this.getContentPane().setLayout( new BorderLayout() );

    _liste = new Vector();
    _liste.add( new CPruefung("Müller", true) );
    CPruefung prf = new CPruefung("Schmidt", true);
    prf.setNote(2);
    prf.setPruefungsform(2);
    prf.setWP(true);
    _liste.add( prf );

    _liste.add( new CPruefung("Meyer", false) );

    _table = createTable();
    _table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);

    JScrollPane sc = new JScrollPane(_table);
    this.getContentPane().add(sc, BorderLayout.CENTER);


    BnNew = new JButton("Neuer Eintrag");
    BnNew.setFont( new Font("Arial", Font.BOLD,18)  );

    BnEdit = new JButton("Bearbeiten");
    BnEdit.setFont( new Font("Arial", Font.BOLD,18)  );
    BnDelete = new JButton("Löschen");
    BnDelete.setFont( new Font("Arial", Font.BOLD,18)  );

    BnEdit.setPreferredSize( BnNew.getPreferredSize() );
    BnDelete.setPreferredSize( BnNew.getPreferredSize() );

    JPanel pnRight = new JPanel();
    pnRight.setLayout( new GridBagLayout() );

    pnRight.add(BnNew,
           new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
            ,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE,
            new Insets(10,10,0,10), 0, 0));

    pnRight.add(BnEdit,
          new GridBagConstraints(0, 1, 1, 1, 0.0, 10.0
            ,GridBagConstraints.EAST, GridBagConstraints.NONE,
            new Insets(0,10,0,10), 0, 0));

    pnRight.add(BnDelete,
          new GridBagConstraints(0, 2, 1, 1, 0.0, 0.0
            ,GridBagConstraints.SOUTHEAST, GridBagConstraints.NONE,
            new Insets(0,10,10,10), 0, 0));

    this.getContentPane().add(pnRight, BorderLayout.EAST);

    // ----------------------

    BnESC = new JButton("Ende");
    BnESC.setFont( new Font("Arial", Font.BOLD,18)  );

    JPanel pn = new JPanel();
    pn.setLayout( new FlowLayout() );
    pn.add(BnESC);
//    pn.setBackground(Color.green);
    this.getContentPane().add(pn, BorderLayout.SOUTH);

    BnNew.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        BnNew_Click();
      }
    });
    BnEdit.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        BnEdit_Click();
      }
    });
    BnDelete.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        BnDelete_Click();
      }
    });

    BnESC.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        BnESC_Click();
      }
    });

  } // setGUI


  // createTable
  public JTable createTable() {
    // Create a model of the data.
        TableModel dataModel = new AbstractTableModel() {
            // These methods always need to be implemented.
            public int getColumnCount() {
              return _names.length;
            }
            public int getRowCount() {
              return _liste.size();
            }

            public Object getValueAt(int row, int col) {
              CPruefung prf = (CPruefung) _liste.elementAt(row);

              switch (col)  {
                case 0: return prf.getName();
                case 1: return new Boolean( prf.isStudent() );
                case 2: return CPruefung.getPruefungsText( prf.getPruefungsform() );
                case 3: return new Integer( prf.getNote() );
                case 4: return new Boolean( prf.isWP() );
                default: return "xxxxxx";
              }
            }

            // The default implementations of these methods in
              // AbstractTableModel would work, but we can refine them.
            public String getColumnName(int column) {
              return _names[column];
            }
            public Class getColumnClass(int c) {
              return getValueAt(0, c).getClass();
            }
            public boolean isCellEditable(int row, int col) {
              return true;
            }


            public void setValueAt(Object aValue, int row, int column) {
              CPruefung prf = (CPruefung) _liste.elementAt(row);
              switch( column ) {
                case 0: prf.setName( (String) aValue);
                        break;
                case 1: prf.setStudent(  (Boolean) aValue  );
                        break;
                case 2: String s = (String) aValue;  // Mündlich etc
                        for (int i=0; i<4; i++) {
                          if (s == CPruefung.getPruefungsText(i) ) {
                            prf.setPruefungsform( i  ) ;
                            break;
                          }
                        }
                        break;
                case 3: prf.setNote(  ((Integer)(aValue)).intValue() ) ;
                        break;
                case 4: prf.setWP( (Boolean) aValue  );
                        break;
              }
            }

         };

     JTable table = new JTable(dataModel);


        // Create a combo box to show that you can use one in a table.
        JComboBox cbPrfForm = new JComboBox();
        cbPrfForm.addItem(  CPruefung.getPruefungsText(0) );
        cbPrfForm.addItem(  CPruefung.getPruefungsText(1) );
        cbPrfForm.addItem(  CPruefung.getPruefungsText(2) );
        cbPrfForm.addItem(  CPruefung.getPruefungsText(3) );

        TableColumn prfColumn = table.getColumn( _names[2] );
        // Use the combo box as the editor in the "Favorite Color" column.
        prfColumn.setCellEditor(new DefaultCellEditor(cbPrfForm));



     
        // Create a combo box to show that you can use one in a table.
        JComboBox cbNote = new JComboBox();
        // hioer dürfen keine Strings eingetragen werden, siehe setValues
        cbNote.addItem( new Integer(1) );
        cbNote.addItem( new Integer(2) );
        cbNote.addItem( new Integer(3) );

        TableColumn noteColumn = table.getColumn( _names[3] );
        // Use the combo box as the editor in the "Favorite Color" column.
        noteColumn.setCellEditor(new DefaultCellEditor(cbNote));




        return table;
  } // createTable




  private void  BnEdit_Click() {
    CPruefung prf1, prf2;

    int i= _table.getSelectedRow();
    if (i==-1 ) {
      // keine Auswahl in der Liste
      return;
    }

    prf1 = (CPruefung) _liste.elementAt( i );

    GUI_02 dialog = new GUI_02(this, prf1);
    setVisible(false);
    dialog.setVisible(true);

    if (dialog.getResult() ) {
        // nun das Objekt kopieren !
      prf2 = new CPruefung( dialog.getValues() );  // Klasse
      _liste.removeElementAt(i);
      _liste.insertElementAt(prf2,i);
      // anzeigen, dass neue Daten vorhanden
      _table.updateUI();

    } // if
    dialog.setVisible(false);
    dialog.dispose();
    setVisible(true);
  } // Edit


  private void  BnDelete_Click() {
    CPruefung prf;
    String sStr="";
    int i= _table.getSelectedRow();
    if (i==-1 ) {
      // keine Auswahl in der Tabelle
      return;
    }

      // nun das Objekt holen
      prf = (CPruefung) _liste.elementAt( i );
      sStr = prf.toString();
      if (basis.YesNo("Eintrag löschen",sStr) ) {
        // anzeigen, dass neue Daten vorhanden
        _liste.remove(i);
        _table.updateUI();
     }
  }  // Delete



  private void BnNew_Click() {
    GUI_02 dialog = new GUI_02(this);
    setVisible(false);
    dialog.setVisible(true);
    CPruefung prf;

    if (dialog.getResult() ) {
        // nun das Objekt kopieren !
      prf = new CPruefung( dialog.getValues() );  // Klasse
      _liste.add( prf );
      // anzeigen, dass neue Daten vorhanden
      _table.updateUI();

    } // if

    dialog.setVisible(false);
    dialog.dispose();
    setVisible(true);
  }  // New

  
  private void BnESC_Click(){
      System.exit(0);
  }


  public static void main(String[] args) {
    GUI_06 frame = new GUI_06();
    frame.setVisible(true);
 }

}




// Dialogklasse zum Anzeigen eines Studenten
class GUI_02 extends JDialog {

  private JLabel jLabel1 = new JLabel();
  private JTextField TName = new JTextField();

  private JButton BnOk = new JButton();
  private JButton BnESC = new JButton();


  private CPruefung _Pruefung = new CPruefung("", false);

  private boolean _bResult=false;


  JRadioButton [] rb_links;
  JRadioButton [] rb_rechts;

  JCheckBox cbBox_Student;
  JCheckBox cbBox_WP;

  public GUI_02(Frame wnd ) {
    super(wnd, true);
    setGUI();
    // Nach der Initialisierung muss die Klick-Methode aufgerufen werden
    Check1_click();
  }

  public GUI_02(Frame wnd, CPruefung prf ) {
    super(wnd, true);
    setGUI();
    setPrf(prf);
    // Nach der Initialisierung muss die Klick-Methode aufgerufen werden
    Check1_click();
  }

  // wird aufgerufen von Edit
  // setzt die GUI-Elemente auf die Werte aus dem Objekt
  private void  setPrf( CPruefung prf) {
    TName.setText(  prf.getName() );
    rb_links[ prf.getPruefungsform() ].setSelected(true);
    if (prf.getPruefungsform()!=3) {
      rb_rechts[ prf.getNote() ].setSelected(true);
    }

    cbBox_WP.setSelected(  prf.isWP()  );

    cbBox_Student.setSelected(  prf.isStudent() );
  }

  private void setGUI() {
    setLocation(300,300);
    setSize(600, 500);
    setTitle("1. Eingabefenster mit GridBagLayout");
    this.getContentPane().setLayout( new GridBagLayout() );

    // setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

    jLabel1.setText("Name");
    TName.setText("");

    jLabel1.setFont( new Font("Arial", Font.BOLD,18)  );
    TName.setFont( new Font("Arial", Font.BOLD,18)  );


    this.getContentPane().add(jLabel1,
         new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.NONE,
            new Insets(0,25,40,0), 0, 0));

    this.getContentPane().add(TName,
        new GridBagConstraints(1, 0, 2, 1, 10.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
            new Insets(0,25,40,25), 0, 0));


    // -----------------------------------
    cbBox_Student = new JCheckBox("Student der HS Harz", false);
    cbBox_Student.setFont( new Font("Arial", Font.BOLD,18)  );

    this.getContentPane().add(cbBox_Student,
           new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
            new Insets(10,20,30,0), 0, 0));

    cbBox_Student.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        Check1_click();
      }
    });

  // -------------------

    rb_links = new JRadioButton[4];
    rb_links[0] = new JRadioButton("Schriftlich", false);
    rb_links[1] = new JRadioButton("Mündlich", true);
    rb_links[2] = new JRadioButton("Entwurfsarbeit", false);
    rb_links[3] = new JRadioButton("Sitzschein", false);

    ButtonGroup group1 = new ButtonGroup();
    for (int i=0; i<rb_links.length; i++) {
       group1.add( rb_links[i] );
       rb_links[i].setFont( new Font("Arial", Font.BOLD,18)  );
        rb_links[i].addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(ActionEvent e) {
          rb_links_click(e);
        }
        });
    }

    // Ein Panel für links
    JLabel Label1 = new JLabel("Prüfungsform");
    Label1.setFont( new Font("Arial", Font.BOLD,18)  );
    JPanel panel1 = new JPanel();
    panel1.setLayout ( new GridLayout(4,1) ); // 5 Zeilen , 2 Spalte
    for (int i=0; i<rb_links.length; i++) {
       panel1.add( rb_links[i] );
    }
    TitledBorder tb1 = new TitledBorder(
        LineBorder.createBlackLineBorder(),
           "Prüfungsform");
    panel1.setBorder(tb1);
    tb1.setTitleColor( Color.red );
    tb1.setTitleFont( new Font("Arial", Font.BOLD,18)  );
    // panel1.add( label2 );

    this.getContentPane().add(panel1,
           new GridBagConstraints(1, 2, 1, 1, 1.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
            new Insets(10,20,0,0), 0, 0));
    // --------------------

    rb_rechts = new JRadioButton[3];
    rb_rechts[0] = new JRadioButton("sehr gut", false);
    rb_rechts[1] = new JRadioButton("gut", false);
    rb_rechts[2] = new JRadioButton("Befriedigend", true);

    // ------------------------


    ButtonGroup group2 = new ButtonGroup();
    for (int i=0; i<rb_rechts.length; i++) {
       group2.add( rb_rechts[i] );
       rb_rechts[i].setFont( new Font("Arial", Font.BOLD,18)  );
        rb_rechts[i].addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(ActionEvent e) {
          rb_rechts_click(e);
        }
        });
    }
    // rb_rechts[2].setSelected(true);

    // JLabel Label2 = new JLabel("Gewünschte Note");
    // Label2.setFont( new Font("Arial", Font.BOLD,18)  );
    JPanel panel2 = new JPanel();
    panel2.setLayout ( new GridLayout(4,1) ); // 5 Zeilen , 2 Spalte
    // panel2.add( Label2 );
    for (int i=0; i<rb_rechts.length; i++) {
       panel2.add( rb_rechts[i] );
    }
    TitledBorder tb2 = new TitledBorder(
        LineBorder.createBlackLineBorder(),
           "Gewünschte Note");
    panel2.setBorder(tb2);
    tb2.setTitleColor( Color.red );
    tb2.setTitleFont( new Font("Arial", Font.BOLD,18)  );

    this.getContentPane().add(panel2,
           new GridBagConstraints(2, 2, 1, 1, 1.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
            new Insets(10,20,0,30), 0, 0));
    // ------------


    cbBox_WP = new JCheckBox("Wiederholungsprüfung", false);
    cbBox_WP.setFont( new Font("Arial", Font.BOLD,18)  );

    this.getContentPane().add(cbBox_WP,
           new GridBagConstraints(1, 3, 1, 1, 1.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
            new Insets(40,20,0,0), 0, 0));

    cbBox_WP.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        Check2_click(e);
      }
    });
    // -------------------

    BnOk.setText("Ok");
    BnESC.setText("Abbruch");
    BnOk.setFont( new Font("Arial", Font.BOLD,18)  );
    BnESC.setFont( new Font("Arial", Font.BOLD,18)  );

    BnOk.setPreferredSize( BnESC.getPreferredSize() );


    JPanel pn = new JPanel();
    pn.setLayout( new FlowLayout() );
    pn.add(BnOk);
    pn.add(BnESC);
//    pn.setBackground(Color.green);
    this.getContentPane().add(pn,
           new GridBagConstraints(0, 4, 3, 1, 1.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
            new Insets(30,0,0,0), 0, 0));

    BnOk.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        BnOk_Click();
      }
    });
    BnESC.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        BnESC_Click();
      }
    });



  }

  void rb_links_click(ActionEvent e) {
    JRadioButton rb = (JRadioButton) e.getSource();
    System.out.println("Geklickt: "+rb.getText() );
    // Check Sitzschein
    if (rb_links[3].isSelected() ) {
      for (int i=0; i<rb_rechts.length; i++) {
         rb_rechts[i].setEnabled( false );
      }
    }
    else {
      for (int i=0; i<rb_rechts.length; i++) {
         rb_rechts[i].setEnabled( true );
      }
    }

  }

  void rb_rechts_click(ActionEvent e) {
    JRadioButton rb = (JRadioButton) e.getSource();
    System.out.println("Geklickt: "+rb.getText() );
  }

   void Check1_click() {
    // JCheckBox chb = (JCheckBox) e.getSource();
    System.out.println("Geklickt: "+cbBox_Student.getText()+
      "\r\n     "+"Status: "+cbBox_Student.isSelected() );

    boolean bOkay = cbBox_Student.isSelected();
    cbBox_WP.setEnabled( bOkay );
    // hier getrennt, da eventuell mehrere Optionen
    for (int i=0; i<rb_links.length; i++) {
       rb_links[i].setEnabled( bOkay );
    }
    // hier getrennt, da eventuell mehrere Optionen
    for (int i=0; i<rb_rechts.length; i++) {
       rb_rechts[i].setEnabled( bOkay );
    }

   }

   void Check2_click(ActionEvent e) {
    JCheckBox chb = (JCheckBox) e.getSource();
    System.out.println("Geklickt: "+chb.getText()+
      "\r\n     "+"Status: "+chb.isSelected() );
   }

  private void BnOk_Click() {
    int i;
    // Check Input, Leerzeichen an den Enden werden gelöscht
    String sRet = TName.getText().trim();
    if ( sRet.length()==0) {
      basis.Message("Eingabe","Bitte tragen Sie einen Wert ein");
      TName.requestFocus(); // setFocus
      return;
    }

    _Pruefung.setName( TName.getText() );

    //
    _Pruefung.setStudent( cbBox_Student.isSelected()  );

    
    if ( cbBox_Student.isSelected() ) {
     int p=-1;
     for (i=0; i<rb_links.length; i++) {
        if (rb_links[i].isSelected() ) {
          p =i;  // Prüfungsfrom zaehlt ab 0
          break;
        }
     }
     if (p == -1) {
        basis.Message("Fehler in der Auswahl Prüfungsfrom","Fehler");
        return;
     }
     _Pruefung.setPruefungsform(p);
     
     // Check Sitzschein
     if (_Pruefung.getPruefungsform() != 3) {
       _Pruefung.setNote( 1 );
       // Eventuell detaillierter in der Note
           // 1,0 1,3  1,7  etc.
       for (i=0; i<rb_rechts.length; i++) {
        if (rb_rechts[i].isSelected() ) {
          _Pruefung.setNote( i+1 );
          break;
        }
       }
       if (_Pruefung.getNote() == -1) {
          basis.Message("Fehler in der Auswahl Prüfungsfrom","Fehler");
          return;
       }
     }
     else {
      _Pruefung.setNote(1);
     }
      _Pruefung.setWP( cbBox_WP.isSelected() );

    }
    else {
      basis.Message("Studieren Sie an der HS Harz","Hinweis");
      _Pruefung.setWP( false );
      _Pruefung.setNote(1);
      _Pruefung.setPruefungsform(3);
    }


    _bResult=true;

    dispose();

    // nun Aktion mit dem Text
  }

  public boolean getResult() {
    return _bResult;
  }


  public CPruefung getValues() {
    return _Pruefung;
  }


  private void BnESC_Click(){
    _bResult=false;
    dispose();
  }

  //Überschreiben, damit das Programm bei Herunterfahren des Systems beendet werden kann
  protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if(e.getID() == WindowEvent.WINDOW_CLOSING) {
      System.exit(0);
    }
  }  // processWindowEvent


}


// Klasse kapselt einen Studenten
// Mit der Methode toString wird die Anzeige in der JList realisiert
// Alle Attribute sind privat
// Plausi bei den set-Methoden
class CPruefung {
   private String _Name;
   private boolean _bStudent;
   private int _Pruefungsform;
   private int _Note;
   private boolean _Wp;

   public CPruefung(String name, boolean bStudent) {
     _Name = name;
     _Pruefungsform = 0;
     _Note = 1;
     _Wp = false;
     _bStudent = bStudent;
   }

   // Clone
   public CPruefung( CPruefung prf) {
     _Name = prf._Name;
     _Pruefungsform = prf._Pruefungsform;
     _Note = prf._Note;
     _Wp = prf._Wp;
     _bStudent = prf._bStudent;
   }


   public static String getPruefungsText(int nr) {
     switch (nr) {
        case 0: return "Mündlich";
        case 1: return "Schriftlich";
        case 2: return "Entwurfsarbeit";
        case 3: return "Sitzschein";
        default: return "Fehler in Case (getPruefungsText)";
      }
   }

   // Methode zum Anzeigen in der Liste
   // Wird automatisch von Java aufgerufen !!!!
   // Kann auch dynamisch geändert werden
   public String toString() {
      String sPruefung= getPruefungsText(_Pruefungsform);
      String sResult;
      if (_Pruefungsform!=3)
            sResult =
            "Name: "+_Name+ "   "+
            "Prüfungsform: " + sPruefung+"   "+
            "Note: "+_Note+"   "+
            "Wiederholungsprüfung: "+_Wp;
      else
            sResult =
            "Name: "+_Name+ "   "+
            "Prüfungsform: " + sPruefung+"   "+
            "Wiederholungsprüfung: "+_Wp;
   return sResult;
   }


   public String getName() {
    return _Name;
   }

   public int getPruefungsform() {
    return _Pruefungsform;
   }

   public int getNote() {
    return _Note;
   }

   public boolean isWP() {
    return _Wp;
   }

   public boolean isStudent() {
    return _bStudent;
   }



   public void setName(String Name) {
    if ( Name.length()>0 )
      _Name = Name;
    else
      throw new IllegalArgumentException("Fehler in setName: ");
   }


   public void setPruefungsform(int Pruefungsform) {
    if ( (Pruefungsform>=0) && (Pruefungsform<=3) )
      _Pruefungsform= Pruefungsform;
    else
      throw new IllegalArgumentException("Fehler in setPruefungsform: "
                      +Integer.toString(Pruefungsform) );
   }

   public void setNote(int Note) {
    if ( (Note>=1) && (Note<=5) )
      _Note=Note;
    else
      throw new IllegalArgumentException("Fehler in setNote: "
                      +Integer.toString(Note) );
   }

   public void setWP(boolean bWp) {
      _Wp = bWp;
   }

   public void setStudent(boolean bStudent) {
    _bStudent = bStudent;
   }


   // Vereinfacht in der Tabelle die Notation
   public void setWP(Boolean bWp) {
      _Wp = bWp.booleanValue();
   }

   public void setStudent(Boolean bStudent) {
    _bStudent = bStudent.booleanValue();
   }



}


class basis {
    /**
    * description: Zeigt eine Nachricht an
    * @see Message, Yes-No, Yes-No-Esc, Ok-Esc
    *
    * @version     1.0  07.07.2002
    * @author      Michael Wilhelm HS Harz, FB AI
    * @param String sTitle, String sMessage
    * @return keinen
    * @exception keine
    */
  public static void Message( String sTitle, String sMessage) {
    JOptionPane.showConfirmDialog(null,sMessage,sTitle,
      JOptionPane.DEFAULT_OPTION,
      JOptionPane.INFORMATION_MESSAGE);  // Symbol
    /*  Optionen der Schalter:
         DEFAULT_OPTION    Ok
         YES_NO_OPTION
         YES_NO_CANCEL_OPTION
         OK_CANCEL_OPTION
     */
     /*  Symbole:
      ERROR_MESSAGE
      INFORMATION_MESSAGE
      WARNING_MESSAGE
      QUESTION_MESSAGE
      PLAIN_MESSAGE
     */

  } // Message

      /**
    * description: Zeigt einen Ja-Nein-Dialog   
    * @see Message, Error, Yes-No-Esc, Ok-Esc
    *
    * @version     1.0  07.07.2002
    * @author      Michael Wilhelm HS Harz, FB AI
    * @param String sTitle, String sMessage
    * @return boolean
    * @exception keine
    */
  public static boolean YesNo( String sTitle, String sMessage) {
    int retcode;
    retcode = JOptionPane.showConfirmDialog(null,sMessage,sTitle,
      JOptionPane.YES_NO_OPTION,
      JOptionPane.QUESTION_MESSAGE);  // Symbol

    switch (retcode) {
       case JOptionPane.YES_OPTION:
         // ja, Änderungen speichern
         return true;
       case JOptionPane.NO_OPTION:
         return false;
       case JOptionPane.CANCEL_OPTION:
       default:
         // abbrechen
         return false;
    }
  } // YesNo



}
