Decimal Format Demo : Number Format « Data Type « Java






Decimal Format Demo

Decimal Format Demo
     
/*
 * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 *   - Neither the name of Sun Microsystems nor the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

import java.awt.Color;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class DecimalFormatDemo extends JPanel {

  static JFrame frame;
  JLabel result;
  NumberFormat inputFormatter;
  String currentPattern;
  double currentNumber = 123.45;
  LocaleGroup availableLocales;

  public DecimalFormatDemo() {

    availableLocales = new LocaleGroup();
    inputFormatter = NumberFormat.getNumberInstance();

    String[] patternExamples = { "##.##", "###,###.##", "##,##,##.##", "#",
        "000,000.0000", "##.0000", "'hello'###.##" };

    currentPattern = patternExamples[0];

    // Set up the UI for entering a number.
    JLabel numberLabel = new JLabel("Enter the number to format:");
    numberLabel.setAlignmentX(Component.LEFT_ALIGNMENT);

    JTextField numberField = new JTextField();
    numberField.setEditable(true);
    numberField.setAlignmentX(Component.LEFT_ALIGNMENT);
    NumberListener numberListener = new NumberListener();
    numberField.addActionListener(numberListener);

    // Set up the UI for selecting a pattern.
    JLabel patternLabel1 = new JLabel("Enter the pattern string or");
    JLabel patternLabel2 = new JLabel("select one from the list:");
    patternLabel1.setAlignmentX(Component.LEFT_ALIGNMENT);
    patternLabel2.setAlignmentX(Component.LEFT_ALIGNMENT);

    JComboBox patternList = new JComboBox(patternExamples);
    patternList.setSelectedIndex(0);
    patternList.setEditable(true);
    patternList.setAlignmentX(Component.LEFT_ALIGNMENT);
    PatternListener patternListener = new PatternListener();
    patternList.addActionListener(patternListener);

    // Set up the UI for selecting a locale.
    JLabel localeLabel = new JLabel("Select a Locale from the list:");
    localeLabel.setAlignmentX(Component.LEFT_ALIGNMENT);

    JComboBox localeList = new JComboBox(availableLocales.getStrings());
    localeList.setSelectedIndex(0);
    localeList.setAlignmentX(Component.LEFT_ALIGNMENT);
    LocaleListener localeListener = new LocaleListener();
    localeList.addActionListener(localeListener);

    // Create the UI for displaying result.
    JLabel resultLabel = new JLabel("Result", JLabel.LEFT);
    resultLabel.setAlignmentX(Component.LEFT_ALIGNMENT);
    result = new JLabel(" ");
    result.setForeground(Color.black);
    result.setAlignmentX(Component.LEFT_ALIGNMENT);
    result.setBorder(BorderFactory.createCompoundBorder(BorderFactory
        .createLineBorder(Color.black), BorderFactory.createEmptyBorder(5, 5,
        5, 5)));

    // Lay out everything
    JPanel numberPanel = new JPanel();
    numberPanel.setLayout(new GridLayout(0, 1));
    numberPanel.add(numberLabel);
    numberPanel.add(numberField);

    JPanel patternPanel = new JPanel();
    patternPanel.setLayout(new BoxLayout(patternPanel, BoxLayout.Y_AXIS));
    patternPanel.add(patternLabel1);
    patternPanel.add(patternLabel2);
    patternPanel.add(patternList);

    JPanel localePanel = new JPanel();
    localePanel.setLayout(new BoxLayout(localePanel, BoxLayout.Y_AXIS));
    localePanel.add(localeLabel);
    localePanel.add(localeList);

    JPanel resultPanel = new JPanel();
    resultPanel.setLayout(new GridLayout(0, 1));
    resultPanel.add(resultLabel);
    resultPanel.add(result);

    setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
    patternPanel.setAlignmentX(Component.CENTER_ALIGNMENT);
    numberPanel.setAlignmentX(Component.CENTER_ALIGNMENT);
    localePanel.setAlignmentX(Component.CENTER_ALIGNMENT);
    resultPanel.setAlignmentX(Component.CENTER_ALIGNMENT);

    add(numberPanel);
    add(Box.createVerticalStrut(10));
    add(patternPanel);
    add(Box.createVerticalStrut(10));
    add(localePanel);
    add(Box.createVerticalStrut(10));
    add(resultPanel);

    setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));

    reformat();
    numberField.setText(result.getText());

  } // constructor

  /** Listens to the pattern combo box. */
  class PatternListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      JComboBox cb = (JComboBox) e.getSource();
      String newSelection = (String) cb.getSelectedItem();
      currentPattern = newSelection;
      reformat();
    }
  }

  /** Listens to the number field. */
  class NumberListener implements ActionListener {
    public void actionPerformed(ActionEvent evt) {
      JTextField inputField = (JTextField) evt.getSource();
      try {
        Number value = inputFormatter.parse(inputField.getText());
        currentNumber = value.doubleValue();
        reformat();
      } catch (ParseException pe) {
        result.setForeground(Color.red);
        result.setText("Illegal Number: " + pe.getMessage());
      }
    }
  }

  /** Listens to the locale combo box. */
  class LocaleListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      JComboBox cb = (JComboBox) e.getSource();
      int index = cb.getSelectedIndex();
      availableLocales.setCurrent(index);
      reformat();
    }
  }

  /** Manages information about locales for this application. */
  class LocaleGroup {

    Locale currentLocale;
    Locale[] supportedLocales = { Locale.US, Locale.GERMANY, Locale.FRANCE
    // Add other locales here, if desired.
    };

    public LocaleGroup() {
      currentLocale = supportedLocales[0];
    }

    public void setCurrent(int index) {
      currentLocale = supportedLocales[index];
    }

    public Locale getCurrent() {
      return currentLocale;
    }

    public String[] getStrings() {
      String[] localeNames = new String[supportedLocales.length];
      for (int k = 0; k < supportedLocales.length; k++) {
        localeNames[k] = supportedLocales[k].getDisplayName();
      }
      return localeNames;
    }
  }

  /** Reformats the input number and displays result. */
  public void reformat() {
    try {
      NumberFormat nf = NumberFormat.getNumberInstance(availableLocales
          .getCurrent());
      DecimalFormat df = (DecimalFormat) nf;
      df.applyPattern(currentPattern);
      result.setForeground(Color.black);
      result.setText(df.format(currentNumber));
    } catch (IllegalArgumentException iae) {
      result.setForeground(Color.red);
      result.setText("Illegal Pattern: " + iae.getMessage());
    }
  }

  public static void main(String s[]) {
    WindowListener l = new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    };

    frame = new JFrame("DecimalFormat Demo");
    frame.addWindowListener(l);
    frame.getContentPane().add("Center", new DecimalFormatDemo());
    frame.pack();
    frame.setVisible(true);
  }
}

   
    
    
    
    
  








Related examples in the same category

1.The Uppercase Option
2.Using the Format Flags
3.The Format Specifiers
4.NumberFormat with Constant Locale UsageNumberFormat with Constant Locale Usage
5.Number Format by locale
6.demonstrates the %n and %% format specifiers:
7.demonstrates the minimum field-width specifier by applying it to the %f conversion:
8.Create a table of squares and cubes.
9.precision modifier: Format 4 decimal places
10.precision modifier: Format to 2 decimal places in a 16 character field
11.precision modifier: Display at most 15 characters in a string
12.left justification: Right justify by default
13.left justification: left justify
14.Demonstrate the space format specifiers.
15.Using an Argument Index
16.the NumberFormat object is created once when the program starts.
17.Default rounding mode
18.RoundingMode.HALF_DOWN
19.RoundingMode.FLOOR
20.RoundingMode.CEILING
21.Format a number our way and the default way
22.Format a number to currencyFormat a number to currency
23.Number Format with LocaleNumber Format with Locale
24.Add leading zeroes to a number
25.Parse number with NumberFormat and Locale
26.Formatting and Parsing a Locale-Specific Percentage
27.Format a number with DecimalFormat
28.Parse a number with NumberFormat and Locale.CANADA
29.Format a number with leading zeroes
30.Format a number for a locale
31.Formatting and Parsing a Number for a Locale
32.Display numbers in scientific notation
33.Format for GERMAN locale
34.Format for the default locale
35.Displaying numbers with commas
36.Formatting a Number in Exponential Notation
37.Using only 0's to the left of E forces no decimal point
38.Parse a GERMAN number
39.Formatting and Parsing Locale-Specific Currency
40.Parse a number for a locale
41.Use grouping to display a number
42.Number format viewer
43.A number formatter for logarithmic values. This formatter does not support parsing.
44.A custom number formatter that formats numbers as hexadecimal strings.
45.NumberFormat and locale
46.PrintfFormat allows the formatting of an array of objects embedded within a string.
47.Parse number with format