--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/javax/swing/text/DefaultFormatterFactory.java Sat Dec 01 00:00:00 2007 +0000
@@ -0,0 +1,313 @@
+/*
+ * Copyright 2000-2006 Sun Microsystems, Inc. All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun in the LICENSE file that accompanied this code.
+ *
+ * This code 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
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+package javax.swing.text;
+
+import java.io.Serializable;
+import java.text.ParseException;
+import javax.swing.JFormattedTextField;
+
+/**
+ * An implementation of
+ * <code>JFormattedTextField.AbstractFormatterFactory</code>.
+ * <code>DefaultFormatterFactory</code> allows specifying a number of
+ * different <code>JFormattedTextField.AbstractFormatter</code>s that are to
+ * be used.
+ * The most important one is the default one
+ * (<code>setDefaultFormatter</code>). The default formatter will be used
+ * if a more specific formatter could not be found. The following process
+ * is used to determine the appropriate formatter to use.
+ * <ol>
+ * <li>Is the passed in value null? Use the null formatter.
+ * <li>Does the <code>JFormattedTextField</code> have focus? Use the edit
+ * formatter.
+ * <li>Otherwise, use the display formatter.
+ * <li>If a non-null <code>AbstractFormatter</code> has not been found, use
+ * the default formatter.
+ * </ol>
+ * <p>
+ * The following code shows how to configure a
+ * <code>JFormattedTextField</code> with two
+ * <code>JFormattedTextField.AbstractFormatter</code>s, one for display and
+ * one for editing.
+ * <pre>
+ * JFormattedTextField.AbstractFormatter editFormatter = ...;
+ * JFormattedTextField.AbstractFormatter displayFormatter = ...;
+ * DefaultFormatterFactory factory = new DefaultFormatterFactory(
+ * displayFormatter, displayFormatter, editFormatter);
+ * JFormattedTextField tf = new JFormattedTextField(factory);
+ * </pre>
+ * <p>
+ * <strong>Warning:</strong>
+ * Serialized objects of this class will not be compatible with
+ * future Swing releases. The current serialization support is
+ * appropriate for short term storage or RMI between applications running
+ * the same version of Swing. As of 1.4, support for long term storage
+ * of all JavaBeans<sup><font size="-2">TM</font></sup>
+ * has been added to the <code>java.beans</code> package.
+ * Please see {@link java.beans.XMLEncoder}.
+ *
+ * @see javax.swing.JFormattedTextField
+ *
+ * @since 1.4
+ */
+public class DefaultFormatterFactory extends JFormattedTextField.AbstractFormatterFactory implements Serializable {
+ /**
+ * Default <code>AbstractFormatter</code> to use if a more specific one has
+ * not been specified.
+ */
+ private JFormattedTextField.AbstractFormatter defaultFormat;
+
+ /**
+ * <code>JFormattedTextField.AbstractFormatter</code> to use for display.
+ */
+ private JFormattedTextField.AbstractFormatter displayFormat;
+
+ /**
+ * <code>JFormattedTextField.AbstractFormatter</code> to use for editing.
+ */
+ private JFormattedTextField.AbstractFormatter editFormat;
+
+ /**
+ * <code>JFormattedTextField.AbstractFormatter</code> to use if the value
+ * is null.
+ */
+ private JFormattedTextField.AbstractFormatter nullFormat;
+
+
+ public DefaultFormatterFactory() {
+ }
+
+ /**
+ * Creates a <code>DefaultFormatterFactory</code> with the specified
+ * <code>JFormattedTextField.AbstractFormatter</code>.
+ *
+ * @param defaultFormat JFormattedTextField.AbstractFormatter to be used
+ * if a more specific
+ * JFormattedTextField.AbstractFormatter can not be
+ * found.
+ */
+ public DefaultFormatterFactory(JFormattedTextField.
+ AbstractFormatter defaultFormat) {
+ this(defaultFormat, null);
+ }
+
+ /**
+ * Creates a <code>DefaultFormatterFactory</code> with the specified
+ * <code>JFormattedTextField.AbstractFormatter</code>s.
+ *
+ * @param defaultFormat JFormattedTextField.AbstractFormatter to be used
+ * if a more specific
+ * JFormattedTextField.AbstractFormatter can not be
+ * found.
+ * @param displayFormat JFormattedTextField.AbstractFormatter to be used
+ * when the JFormattedTextField does not have focus.
+ */
+ public DefaultFormatterFactory(
+ JFormattedTextField.AbstractFormatter defaultFormat,
+ JFormattedTextField.AbstractFormatter displayFormat) {
+ this(defaultFormat, displayFormat, null);
+ }
+
+ /**
+ * Creates a DefaultFormatterFactory with the specified
+ * JFormattedTextField.AbstractFormatters.
+ *
+ * @param defaultFormat JFormattedTextField.AbstractFormatter to be used
+ * if a more specific
+ * JFormattedTextField.AbstractFormatter can not be
+ * found.
+ * @param displayFormat JFormattedTextField.AbstractFormatter to be used
+ * when the JFormattedTextField does not have focus.
+ * @param editFormat JFormattedTextField.AbstractFormatter to be used
+ * when the JFormattedTextField has focus.
+ */
+ public DefaultFormatterFactory(
+ JFormattedTextField.AbstractFormatter defaultFormat,
+ JFormattedTextField.AbstractFormatter displayFormat,
+ JFormattedTextField.AbstractFormatter editFormat) {
+ this(defaultFormat, displayFormat, editFormat, null);
+ }
+
+ /**
+ * Creates a DefaultFormatterFactory with the specified
+ * JFormattedTextField.AbstractFormatters.
+ *
+ * @param defaultFormat JFormattedTextField.AbstractFormatter to be used
+ * if a more specific
+ * JFormattedTextField.AbstractFormatter can not be
+ * found.
+ * @param displayFormat JFormattedTextField.AbstractFormatter to be used
+ * when the JFormattedTextField does not have focus.
+ * @param editFormat JFormattedTextField.AbstractFormatter to be used
+ * when the JFormattedTextField has focus.
+ * @param nullFormat JFormattedTextField.AbstractFormatter to be used
+ * when the JFormattedTextField has a null value.
+ */
+ public DefaultFormatterFactory(
+ JFormattedTextField.AbstractFormatter defaultFormat,
+ JFormattedTextField.AbstractFormatter displayFormat,
+ JFormattedTextField.AbstractFormatter editFormat,
+ JFormattedTextField.AbstractFormatter nullFormat) {
+ this.defaultFormat = defaultFormat;
+ this.displayFormat = displayFormat;
+ this.editFormat = editFormat;
+ this.nullFormat = nullFormat;
+ }
+
+ /**
+ * Sets the <code>JFormattedTextField.AbstractFormatter</code> to use as
+ * a last resort, eg in case a display, edit or null
+ * <code>JFormattedTextField.AbstractFormatter</code> has not been
+ * specified.
+ *
+ * @param atf JFormattedTextField.AbstractFormatter used if a more
+ * specific is not specified
+ */
+ public void setDefaultFormatter(JFormattedTextField.AbstractFormatter atf){
+ defaultFormat = atf;
+ }
+
+ /**
+ * Returns the <code>JFormattedTextField.AbstractFormatter</code> to use
+ * as a last resort, eg in case a display, edit or null
+ * <code>JFormattedTextField.AbstractFormatter</code>
+ * has not been specified.
+ *
+ * @return JFormattedTextField.AbstractFormatter used if a more specific
+ * one is not specified.
+ */
+ public JFormattedTextField.AbstractFormatter getDefaultFormatter() {
+ return defaultFormat;
+ }
+
+ /**
+ * Sets the <code>JFormattedTextField.AbstractFormatter</code> to use if
+ * the <code>JFormattedTextField</code> is not being edited and either
+ * the value is not-null, or the value is null and a null formatter has
+ * has not been specified.
+ *
+ * @param atf JFormattedTextField.AbstractFormatter to use when the
+ * JFormattedTextField does not have focus
+ */
+ public void setDisplayFormatter(JFormattedTextField.AbstractFormatter atf){
+ displayFormat = atf;
+ }
+
+ /**
+ * Returns the <code>JFormattedTextField.AbstractFormatter</code> to use
+ * if the <code>JFormattedTextField</code> is not being edited and either
+ * the value is not-null, or the value is null and a null formatter has
+ * has not been specified.
+ *
+ * @return JFormattedTextField.AbstractFormatter to use when the
+ * JFormattedTextField does not have focus
+ */
+ public JFormattedTextField.AbstractFormatter getDisplayFormatter() {
+ return displayFormat;
+ }
+
+ /**
+ * Sets the <code>JFormattedTextField.AbstractFormatter</code> to use if
+ * the <code>JFormattedTextField</code> is being edited and either
+ * the value is not-null, or the value is null and a null formatter has
+ * has not been specified.
+ *
+ * @param atf JFormattedTextField.AbstractFormatter to use when the
+ * component has focus
+ */
+ public void setEditFormatter(JFormattedTextField.AbstractFormatter atf) {
+ editFormat = atf;
+ }
+
+ /**
+ * Returns the <code>JFormattedTextField.AbstractFormatter</code> to use
+ * if the <code>JFormattedTextField</code> is being edited and either
+ * the value is not-null, or the value is null and a null formatter has
+ * has not been specified.
+ *
+ * @return JFormattedTextField.AbstractFormatter to use when the
+ * component has focus
+ */
+ public JFormattedTextField.AbstractFormatter getEditFormatter() {
+ return editFormat;
+ }
+
+ /**
+ * Sets the formatter to use if the value of the JFormattedTextField is
+ * null.
+ *
+ * @param atf JFormattedTextField.AbstractFormatter to use when
+ * the value of the JFormattedTextField is null.
+ */
+ public void setNullFormatter(JFormattedTextField.AbstractFormatter atf) {
+ nullFormat = atf;
+ }
+
+ /**
+ * Returns the formatter to use if the value is null.
+ *
+ * @return JFormattedTextField.AbstractFormatter to use when the value is
+ * null
+ */
+ public JFormattedTextField.AbstractFormatter getNullFormatter() {
+ return nullFormat;
+ }
+
+ /**
+ * Returns either the default formatter, display formatter, editor
+ * formatter or null formatter based on the state of the
+ * JFormattedTextField.
+ *
+ * @param source JFormattedTextField requesting
+ * JFormattedTextField.AbstractFormatter
+ * @return JFormattedTextField.AbstractFormatter to handle
+ * formatting duties.
+ */
+ public JFormattedTextField.AbstractFormatter getFormatter(
+ JFormattedTextField source) {
+ JFormattedTextField.AbstractFormatter format = null;
+
+ if (source == null) {
+ return null;
+ }
+ Object value = source.getValue();
+
+ if (value == null) {
+ format = getNullFormatter();
+ }
+ if (format == null) {
+ if (source.hasFocus()) {
+ format = getEditFormatter();
+ }
+ else {
+ format = getDisplayFormatter();
+ }
+ if (format == null) {
+ format = getDefaultFormatter();
+ }
+ }
+ return format;
+ }
+}