This program demonstrates formatting numbers under various locales. : Locale « I18N « Java






This program demonstrates formatting numbers under various locales.

This program demonstrates formatting numbers under various locales.
  
/*
 This program is a part of the companion code for Core Java 8th ed.
 (http://horstmann.com/corejava)

 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

import java.awt.Container;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Locale;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

/**
 * This program demonstrates formatting numbers under various locales.
 * 
 * @version 1.13 2007-07-25
 * @author Cay Horstmann
 */
public class NumberFormatTest {
  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      public void run() {
        JFrame frame = new NumberFormatFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
      }
    });
  }
}

/**
 * This frame contains radio buttons to select a number format, a combo box to
 * pick a locale, a text field to display a formatted number, and a button to
 * parse the text field contents.
 */
class NumberFormatFrame extends JFrame {
  public NumberFormatFrame() {
    setTitle("NumberFormatTest");
    setLayout(new GridBagLayout());

    ActionListener listener = new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        updateDisplay();
      }
    };

    JPanel p = new JPanel();
    addRadioButton(p, numberRadioButton, rbGroup, listener);
    addRadioButton(p, currencyRadioButton, rbGroup, listener);
    addRadioButton(p, percentRadioButton, rbGroup, listener);

    add(new JLabel("Locale:"), new GBC(0, 0).setAnchor(GBC.EAST));
    add(p, new GBC(1, 1));
    add(parseButton, new GBC(0, 2).setInsets(2));
    add(localeCombo, new GBC(1, 0).setAnchor(GBC.WEST));
    add(numberText, new GBC(1, 2).setFill(GBC.HORIZONTAL));
    locales = (Locale[]) NumberFormat.getAvailableLocales().clone();
    Arrays.sort(locales, new Comparator<Locale>() {
      public int compare(Locale l1, Locale l2) {
        return l1.getDisplayName().compareTo(l2.getDisplayName());
      }
    });
    for (Locale loc : locales)
      localeCombo.addItem(loc.getDisplayName());
    localeCombo.setSelectedItem(Locale.getDefault().getDisplayName());
    currentNumber = 123456.78;
    updateDisplay();

    localeCombo.addActionListener(listener);

    parseButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        String s = numberText.getText().trim();
        try {
          Number n = currentNumberFormat.parse(s);
          if (n != null) {
            currentNumber = n.doubleValue();
            updateDisplay();
          } else {
            numberText.setText("Parse error: " + s);
          }
        } catch (ParseException e) {
          numberText.setText("Parse error: " + s);
        }
      }
    });
    pack();
  }

  /**
   * Adds a radio button to a container.
   * 
   * @param p
   *          the container into which to place the button
   * @param b
   *          the button
   * @param g
   *          the button group
   * @param listener
   *          the button listener
   */
  public void addRadioButton(Container p, JRadioButton b, ButtonGroup g, ActionListener listener) {
    b.setSelected(g.getButtonCount() == 0);
    b.addActionListener(listener);
    g.add(b);
    p.add(b);
  }

  /**
   * Updates the display and formats the number according to the user settings.
   */
  public void updateDisplay() {
    Locale currentLocale = locales[localeCombo.getSelectedIndex()];
    currentNumberFormat = null;
    if (numberRadioButton.isSelected())
      currentNumberFormat = NumberFormat.getNumberInstance(currentLocale);
    else if (currencyRadioButton.isSelected())
      currentNumberFormat = NumberFormat.getCurrencyInstance(currentLocale);
    else if (percentRadioButton.isSelected())
      currentNumberFormat = NumberFormat.getPercentInstance(currentLocale);
    String n = currentNumberFormat.format(currentNumber);
    numberText.setText(n);
  }

  private Locale[] locales;

  private double currentNumber;

  private JComboBox localeCombo = new JComboBox();

  private JButton parseButton = new JButton("Parse");

  private JTextField numberText = new JTextField(30);

  private JRadioButton numberRadioButton = new JRadioButton("Number");

  private JRadioButton currencyRadioButton = new JRadioButton("Currency");

  private JRadioButton percentRadioButton = new JRadioButton("Percent");

  private ButtonGroup rbGroup = new ButtonGroup();

  private NumberFormat currentNumberFormat;
}

/*
 * This program is a part of the companion code for Core Java 8th ed.
 * (http://horstmann.com/corejava)
 * 
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * this program. If not, see <http://www.gnu.org/licenses/>.
 */

/*
 * GBC - A convenience class to tame the GridBagLayout
 * 
 * Copyright (C) 2002 Cay S. Horstmann (http://horstmann.com)
 * 
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation; either version 2 of the License, or (at your option) any later
 * version.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
 * Place, Suite 330, Boston, MA 02111-1307 USA
 */

/**
 * This class simplifies the use of the GridBagConstraints class.
 */
class GBC extends GridBagConstraints {
  /**
   * Constructs a GBC with a given gridx and gridy position and all other grid
   * bag constraint values set to the default.
   * 
   * @param gridx
   *          the gridx position
   * @param gridy
   *          the gridy position
   */
  public GBC(int gridx, int gridy) {
    this.gridx = gridx;
    this.gridy = gridy;
  }

  /**
   * Constructs a GBC with given gridx, gridy, gridwidth, gridheight and all
   * other grid bag constraint values set to the default.
   * 
   * @param gridx
   *          the gridx position
   * @param gridy
   *          the gridy position
   * @param gridwidth
   *          the cell span in x-direction
   * @param gridheight
   *          the cell span in y-direction
   */
  public GBC(int gridx, int gridy, int gridwidth, int gridheight) {
    this.gridx = gridx;
    this.gridy = gridy;
    this.gridwidth = gridwidth;
    this.gridheight = gridheight;
  }

  /**
   * Sets the anchor.
   * 
   * @param anchor
   *          the anchor value
   * @return this object for further modification
   */
  public GBC setAnchor(int anchor) {
    this.anchor = anchor;
    return this;
  }

  /**
   * Sets the fill direction.
   * 
   * @param fill
   *          the fill direction
   * @return this object for further modification
   */
  public GBC setFill(int fill) {
    this.fill = fill;
    return this;
  }

  /**
   * Sets the cell weights.
   * 
   * @param weightx
   *          the cell weight in x-direction
   * @param weighty
   *          the cell weight in y-direction
   * @return this object for further modification
   */
  public GBC setWeight(double weightx, double weighty) {
    this.weightx = weightx;
    this.weighty = weighty;
    return this;
  }

  /**
   * Sets the insets of this cell.
   * 
   * @param distance
   *          the spacing to use in all directions
   * @return this object for further modification
   */
  public GBC setInsets(int distance) {
    this.insets = new Insets(distance, distance, distance, distance);
    return this;
  }

  /**
   * Sets the insets of this cell.
   * 
   * @param top
   *          the spacing to use on top
   * @param left
   *          the spacing to use to the left
   * @param bottom
   *          the spacing to use on the bottom
   * @param right
   *          the spacing to use to the right
   * @return this object for further modification
   */
  public GBC setInsets(int top, int left, int bottom, int right) {
    this.insets = new Insets(top, left, bottom, right);
    return this;
  }

  /**
   * Sets the internal padding
   * 
   * @param ipadx
   *          the internal padding in x-direction
   * @param ipady
   *          the internal padding in y-direction
   * @return this object for further modification
   */
  public GBC setIpad(int ipadx, int ipady) {
    this.ipadx = ipadx;
    this.ipady = ipady;
    return this;
  }
}

   
    
  








Related examples in the same category

1.List Locales from Locale.getAvailableLocales()List Locales from Locale.getAvailableLocales()
2.List all Locale from SimpleDateFormatList all Locale from SimpleDateFormat
3.Locale Constant
4.Country Language CodesCountry Language Codes
5.Get Days Of The Week for different localeGet Days Of The Week for different locale
6.Get Display Country for default localeGet Display Country for default locale
7.Get ISO3 Language for default localeGet ISO3 Language for default locale
8.Get Display Name for default localeGet Display Name for default locale
9.Get Display Variant for default localeGet Display Variant for default locale
10.Get the 2-letter country code; may be equal to ""
11.List Locale OrientationList Locale Orientation
12.Get localized name suitable for display to the user
13.Setting the Default Locale on the command line
14.Set language and country code on the command line
15.Change the default locale is to call Locale.setDefault():
16.Set the default locale to pre-defined locale
17.Set the default locale to custom locale
18.format date for a Locale
19.Get a list of country names
20.Set only language code on the command line
21.Set a default Locale
22.Disable localization
23.Set of convenience routines for internationalized code
24.Print the default locale
25.Change the default locale
26.iso639-2-language-code.csv
27.iso3166-country-codes.csv
28.Converts a String to a Locale
29.Converts the double value to locale-independent string representation
30.Calculate the postfix to append to a filename to load the correct single filename for that Locale.
31.Calculate the postfixes along the search path from the base bundle to the bundle specified by baseName and locale.
32.Concat postfix to the name. Take care of existing filename extension.
33.Convert a string based locale into a Locale Object
34.Obtains an unmodifiable set of installed locales.
35.Obtains the list of languages supported for a given country.
36.Obtains the list of locales to search through when performing a locale search.
37.Parse the given localeString into a java.util.Locale
38.Returns the parent locale of a given locale.
39.This program demonstrates collating strings under various locales.This program demonstrates collating strings under various locales.
40.This program demonstrates formatting dates under various locales.This program demonstrates formatting dates under various locales.
41.Builds a Locale instance from the passed string.
42.Utility class providing methods to access the Locale of the current thread and to get Localised strings.