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); } }