Formatted Text Fields

Swing provides extended functionality for text fields through the JFormattedTextField class introduced in SDK 1.4. A JFormattedTextField can display its value in a friendly (and locale-specific) way, enforce restrictions on its value, be used to edit non-String objects, and permit its value (or part of its value) to be incremented or decremented with the keyboard.

import javax.swing.*;

public class SimpleFTF extends JPanel {

	public SimpleFTF() {
		JFormattedTextField ftf[] = new JFormattedTextField[7];
                // Description of each field
		String des[] = new String[ftf.length]; 

		des[0] = "Date";
		ftf[0] = new JFormattedTextField(new java.util.Date());

		des[1] = "Integer";
		ftf[1] = new JFormattedTextField(new Integer(90032221));

		des[2] = "Float";
		ftf[2] = new JFormattedTextField(new Float(3.14));
                // Manually specify a NumberFormat.
		des[3] = "Float work-around"; 
		ftf[3] = 
new JFormattedTextField(java.text.NumberFormat.getInstance());
		ftf[3].setValue(new Float(3.14));

		des[4] = "currency";
		ftf[4] = new JFormattedTextField(java.text.NumberFormat.
                         getCurrencyInstance());
		ftf[4].setValue(new Float(5.99));

		des[5] = "percent";
		ftf[5] = new JFormattedTextField(java.text.NumberFormat.
                         getPercentInstance());
		ftf[5].setValue(new Float(0.33));

                // Works via 1-arg String constructor and // toString( )
		des[6] = "java.net.URL"; 
					
		java.net.URL u = null;
		try {
			u = new java.net.URL("http://www.ora.com/");
		} catch (java.net.MalformedURLException ignored) {
		}
		ftf[6] = new JFormattedTextField(u);
		ftf[6].setColumns(24);

		// Add each ftf[] to a BoxLayout.
		setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
		for (int j = 0; j < ftf.length; j += 1) {
			JPanel borderPanel = 
new JPanel(new java.awt.BorderLayout());
			borderPanel.setBorder(
new javax.swing.border.TitledBorder(des[j]));
			borderPanel.add(ftf[j], java.awt.BorderLayout.CENTER);
			add(borderPanel);
		}
	}

	public static void main(String argv[]) {
		String localeString = 
java.util.Locale.getDefault().getDisplayName();
		JFrame f = new JFrame("SimpleFTF " + localeString);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setContentPane(new SimpleFTF());
		f.pack();
		f.setVisible(true);
	}
}