//Titel:            JTextField mit Listener
//Version:          2.0, 06.11.2010
//Copyright:        HS-Harz, FB AI
//Autor:            Dipl.-Inf.(TU) Dipl.-Ing.(FH) Michael Wilhelm
//Beschreibung:     Beispiel für die Anwendung des NumberFormat


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


//import java.text.NumberFormat;
import java.text.*;


public class NumberFormatTest extends JFrame {

  JLabel jLabel1 = new JLabel("Eingangswert");
  JTextField TValue = new JTextField("1234567.45678");
  JLabel jLabel2 = new JLabel("Formattyp");
  JComboBox cbFormat = new JComboBox();
  JTextArea editor = new JTextArea("");

  JButton BnOk = new JButton("Ok");
  JButton BnClear = new JButton("Löschen");
  JButton BnAll = new JButton("Alles");
  JButton BnEsc = new JButton("Abbruch");
  JButton BnHelp = new JButton("Hilfe");

  public NumberFormatTest() {
    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    setGUI();
  }

  private void setGUI() {
    setSize(800, 630);
    setLayout( new GridBagLayout() );
    setTitle("Test von NumberFormat");

    jLabel1.setFont( new Font("Arial", Font.BOLD,18)  );
    TValue.setFont( new Font("Arial", Font.BOLD,18)  );
    jLabel2.setFont( new Font("Arial", Font.BOLD,18)  );
    cbFormat.setFont( new Font("Arial", Font.BOLD,18)  );
    editor.setFont( new Font("Arial", Font.BOLD,18)  );

    editor.setText("Format\tEingabe\tFormatausgabe" );


    BnOk.setFont( new Font("Arial", Font.BOLD,16)  );
    BnEsc.setFont( new Font("Arial", Font.BOLD,16)  );
    BnClear.setFont( new Font("Arial", Font.BOLD,16)  );
    BnAll.setFont( new Font("Arial", Font.BOLD,16)  );
    BnHelp.setFont( new Font("Arial", Font.BOLD,16)  );

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

    this.getContentPane().add(TValue,
        new GridBagConstraints(
               1, 0, 1, 1, 80.0, 0.0
            ,GridBagConstraints.WEST,
            GridBagConstraints.HORIZONTAL,
            new Insets(10,20,20,20), 0, 0));

    this.getContentPane().add(jLabel2,
         new GridBagConstraints(
             0, 1, 1, 1, 0.0, 0.0
            ,GridBagConstraints.WEST,
            GridBagConstraints.NONE,
            new Insets(10,20,20,0), 0, 0));

    this.getContentPane().add(cbFormat,
        new GridBagConstraints(
               1, 1, 1, 1, 80.0, 0.0
            ,GridBagConstraints.WEST,
            GridBagConstraints.HORIZONTAL,
            new Insets(10,20,20,20), 0, 0));


    this.getContentPane().add( new JScrollPane(editor),
        new GridBagConstraints(
             1, 2, 2, 1, 1.0, 1.0
            ,GridBagConstraints.WEST, GridBagConstraints.BOTH,
            new Insets(0,20,20,20), 0, 0));

    JPanel pn = new JPanel();
    pn.add(BnOk);
    pn.add(BnClear);
    pn.add(BnAll);
    pn.add(BnEsc);
    pn.add(BnHelp);
    this.getContentPane().add(pn,
           new GridBagConstraints(
             0, 3, 2, 1, 1.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
            new Insets(0,0,0,0), 0, 0));

     BnOk.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(ActionEvent e) {
              BnOk_Click();
            }
          });
     BnClear.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(ActionEvent e) {
              BnClear_Click();
            }
          });
     BnAll.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(ActionEvent e) {
              BnAll_Click();
            }
          });

     BnEsc.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(ActionEvent e) {
              BnEsc_Click();
            }
          });
     BnHelp.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(ActionEvent e) {
              BnHelp_Click();
            }
          });

      cbFormat.addItem("0000");  // nur Integer
      cbFormat.addItem("##");  // nur Integer
      cbFormat.addItem("#.00");  // ev. keine "Einer"
      cbFormat.addItem("#.##");  // ev. keine Nachkommastellen
      cbFormat.addItem("0.00");  // 
      cbFormat.addItem("0.0#");  // nur eine feste Nachkommastelle
      cbFormat.addItem("#.000000");
      cbFormat.addItem(",###");  // minimal nur Einer und Komma
      cbFormat.addItem("#.#;(#.#)");  // links positiv   rechts negativ
      cbFormat.addItem(",###.## \u00A4");
      cbFormat.addItem(",#00.00 \u00A4\u00A4");
       // NumberFormat.getCurrencyInstance().format( 12345.6789 )  '
  
      cbFormat.setEditable(true);
      cbFormat.setSelectedIndex(0);

  } // setGUI


    private void BnOk_Click() {
       String sErg;
       String sZahl;
       double dZahl;
       try {
         sErg = editor.getText();
         if ( ! sErg.equals("") ) {
           sErg += "\n";
         }
         String sFormat = (String) cbFormat.getSelectedItem();
         if (sFormat==null) return;
         sZahl = TValue.getText();
         dZahl = Double.parseDouble(sZahl); 
         DecimalFormat df =   new DecimalFormat  ( sFormat );
         editor.setText( sErg + sFormat + "\t" + sZahl +"\t" +df.format(dZahl) );
       }
       catch (NumberFormatException e) {
         ErrorBox("Fehler","Bitte eine numerische Eingabe betätigen");
       }
    }  // BnOK_click

    private void BnAll_Click() {
       String sErg, sEditor;
       String sZahl;
       String sFormat;
       String sStr;
       double dZahl;
       int i,n;
       try {
         sErg = "";
         sEditor =  "Format\tEingabe\tFormatausgabe\n";
         n = cbFormat.getItemCount();
         sZahl = TValue.getText();
         dZahl = Double.parseDouble(sZahl); 
         for (i=0; i<n; i++) {
            sFormat = (String) cbFormat.getItemAt(i);
            DecimalFormat df =   new DecimalFormat  ( sFormat );
            sEditor += sFormat + "\t" + sZahl +"\t" +df.format(dZahl) + "\n";
         } // for
         sFormat = "NumberFormat.getInstance().format";
         sStr = NumberFormat.getInstance().format( dZahl );
         sEditor += sFormat + "\n\t" + sZahl +"\t" +sStr + "\n";

         sFormat = "NumberFormat.getCurrencyInstance().format";
         sStr = NumberFormat.getCurrencyInstance().format( dZahl );
         sEditor += sFormat + "\n\t" + sZahl +"\t" +sStr + "\n";
         editor.setText( sEditor );
       }
       catch (NumberFormatException e) {
         ErrorBox("Fehler","Bitte eine numerische Eingabe betätigen");
       }
    }



    private void BnClear_Click() {
      editor.setText("Format\tEingabe\tFormatausgabe" );
    }

   private void BnHelp_Click() {
     JHelp frame = new JHelp();
     frame.setVisible(true);
   }

    private void BnEsc_Click() {
        setVisible(false);
        System.exit(0);
    }

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

    public void ErrorBox( String sTitle, String sMessage) {
        JOptionPane.showConfirmDialog(null,sMessage,sTitle,
          JOptionPane.DEFAULT_OPTION,
          JOptionPane.ERROR_MESSAGE);  // Symbol
    } // ErrorBox

}  // NumberFormatTestTest

class JHelp extends JFrame {
   private JTextArea editor = new JTextArea();

   public JHelp() {
     setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
     setSize(300,200);
     setLocation(400,50);
     setTitle("Hilfe für NumberFormat");
     setAlwaysOnTop(true);  // ist jetzt immer oben
     setGUI();
   }

   private void addLine(String sLine) {
     editor.append(sLine + "\n");
   }

   private void setGUI() {

     setLayout(new BorderLayout() );
     getContentPane().add( new JScrollPane(editor),BorderLayout.CENTER);
     editor.setFont( new Font("Courier New", Font.BOLD,14)  );

     addLine("Symbol und Erläuterung");
     addLine("0");
     addLine("Ist eine Ziffer, entweder eine Ziffer oder Null");
     addLine("#");
     addLine("Ist eine Ziffer, entweder eine Ziffer oder ein Leerzeichen");
     addLine(".");
     addLine("Dezimaltrenner. Trennt Vor- und Nachkommastellen.");
     addLine(",");
     addLine("Komma ist Wiederholungszeichen für eine Gruppe. Tausendergruppe, Milliongruppe etc.");
     addLine(";");
     addLine("Trennzeichen. Links davon steht das Muster für positive, rechts das für negative Zahlen.");
     addLine("-");
     addLine("Das Zeichen für das negative Zahlen");
     addLine("%");
     addLine("Die Zahl wird mit 100 multipliziert (Prozentwert)");
     addLine("%%");
     addLine("Die Zahl wird mit 1000 multipliziert (Promillewert)");
     addLine("\u00A4");
     addLine("Nationales Währungssymbol (€ für Deutschland)");
     addLine("\u00A4\u00A4");
     addLine("Internationales Währungssymbol (EUR für Deutschland)");
     addLine("X");
     addLine("Alle anderen Zeichen z. B. X können ganz normal benutzt werden.");
     addLine("'");
     addLine("Ausmarkieren von speziellen Symbolen im Präfix oder Suffix à la \\");
     addLine("");
     addLine("");
     addLine("Feste Beispiele:");
     addLine("String sStr = NumberFormat.getCurrencyInstance().format( 12345.6789 ) liefert 12.345,68 € ");
     addLine("");
     addLine("Formatiert mit und das Ergebnis");
     addLine("DateFormat.getDateInstance().format( new Date() )");
     addLine("liefert 02.09.2005");
     addLine("");
     addLine("DateFormat.getTimeInstance().format( new Date() )");
     addLine("liefert 15:25:16");
     addLine("");
     addLine("DateFormat.getDateTimeInstance().format( new Date() )");
     addLine("liefert 02.09.2005 15:25:16");
     addLine("");
     addLine("NumberFormat.getInstance().format( 12345.6789 )");
     addLine("liefert 12.345,679");
     addLine("");
     addLine("NumberFormat.getCurrencyInstance().format( 12345.6789 )");
     addLine("liefert 12.345,68 €");
     addLine("");
     addLine("NumberFormat.getPercentInstance().format( 0.123 )");
     addLine("liefert 12 %");

   }


}  // JHelp