/* * Copyright (c) 1995, 2008, Oracle and/or its affiliates. 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 Oracle or 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. */ package components; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.text.*; /** * TextInputDemo.java uses these additional files: * SpringUtilities.java * ... */ public class TextInputDemo extends JPanel implements ActionListener, FocusListener { JTextField streetField, cityField; JFormattedTextField zipField; JSpinner stateSpinner; boolean addressSet = false; Font regularFont, italicFont; JLabel addressDisplay; final static int GAP = 10; public TextInputDemo() { setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS)); JPanel leftHalf = new JPanel() { //Don't allow us to stretch vertically. public Dimension getMaximumSize() { Dimension pref = getPreferredSize(); return new Dimension(Integer.MAX_VALUE, pref.height); } }; leftHalf.setLayout(new BoxLayout(leftHalf, BoxLayout.PAGE_AXIS)); leftHalf.add(createEntryFields()); leftHalf.add(createButtons()); add(leftHalf); add(createAddressDisplay()); } protected JComponent createButtons() { JPanel panel = new JPanel(new FlowLayout(FlowLayout.TRAILING)); JButton button = new JButton("Set address"); button.addActionListener(this); panel.add(button); button = new JButton("Clear address"); button.addActionListener(this); button.setActionCommand("clear"); panel.add(button); //Match the SpringLayout's gap, subtracting 5 to make //up for the default gap FlowLayout provides. panel.setBorder(BorderFactory.createEmptyBorder(0, 0, GAP-5, GAP-5)); return panel; } /** * Called when the user clicks the button or presses * Enter in a text field. */ public void actionPerformed(ActionEvent e) { if ("clear".equals(e.getActionCommand())) { addressSet = false; streetField.setText(""); cityField.setText(""); //We can't just setText on the formatted text //field, since its value will remain set. zipField.setValue(null); } else { addressSet = true; } updateDisplays(); } protected void updateDisplays() { addressDisplay.setText(formatAddress()); if (addressSet) { addressDisplay.setFont(regularFont); } else { addressDisplay.setFont(italicFont); } } protected JComponent createAddressDisplay() { JPanel panel = new JPanel(new BorderLayout()); addressDisplay = new JLabel(); addressDisplay.setHorizontalAlignment(JLabel.CENTER); regularFont = addressDisplay.getFont().deriveFont(Font.PLAIN, 16.0f); italicFont = regularFont.deriveFont(Font.ITALIC); updateDisplays(); //Lay out the panel. panel.setBorder(BorderFactory.createEmptyBorder( GAP/2, //top 0, //left GAP/2, //bottom 0)); //right panel.add(new JSeparator(JSeparator.VERTICAL), BorderLayout.LINE_START); panel.add(addressDisplay, BorderLayout.CENTER); panel.setPreferredSize(new Dimension(200, 150)); return panel; } protected String formatAddress() { if (!addressSet) return "No address set."; String street = streetField.getText(); String city = cityField.getText(); String state = (String)stateSpinner.getValue(); String zip = zipField.getText(); String empty = ""; if ((street == null) || empty.equals(street)) { street = "(no street specified)"; } if ((city == null) || empty.equals(city)) { city = "(no city specified)"; } if ((state == null) || empty.equals(state)) { state = "(no state specified)"; } else { int abbrevIndex = state.indexOf('(') + 1; state = state.substring(abbrevIndex, abbrevIndex + 2); } if ((zip == null) || empty.equals(zip)) { zip = ""; } StringBuffer sb = new StringBuffer(); sb.append("
");
sb.append(street);
sb.append("
");
sb.append(city);
sb.append(" ");
sb.append(state); //should format
sb.append(" ");
sb.append(zip);
sb.append("