|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent javax.swing.text.JTextComponent javax.swing.JTextField javax.swing.JFormattedTextField
public class JFormattedTextField
JFormattedTextField
扩展了 JTextField
,添加了对格式化任意值的支持,以及一旦用户编辑了文本就检索特定对象的支持。以下代码说明了如何配置 JFormattedTextField
来编辑日期:
JFormattedTextField ftf = new JFormattedTextField(); ftf.setValue(new Date());
一旦创建了 JFormattedTextField
,就可以通过添加 PropertyChangeListener
的方式来侦听编辑更改,并且使用属性名 value
侦听 PropertyChangeEvent
。
JFormattedTextField
允许配置在失去焦点时应该采取的措施。可能的值为:
值 | 描述 |
---|---|
JFormattedTextField.REVERT | 恢复显示以匹配 getValue ,这可能丢失当前的编辑内容。
|
JFormattedTextField.COMMIT | 提交当前值。如果 AbstractFormatter 不认为所编辑的值是合法值,则抛出 ParseException ,然后不更改该值并保留已编辑的值。
|
JFormattedTextField.COMMIT_OR_REVERT | 与 COMMIT 类似,但是如果该值不是合法的,则其行为类似于 REVERT 。
|
JFormattedTextField.PERSIST | 不执行任何操作,不获取新的 AbstractFormatter 也不更新该值。
|
JFormattedTextField.COMMIT_OR_REVERT
,有关此内容的更多信息,请参阅 setFocusLostBehavior(int)
。
JFormattedTextField
允许焦点离开,即使当前编辑的值是无效的也是如此。要在 JFormattedTextField
处于无效编辑状态时锁定焦点,可以附加一个 InputVerifier
。以下代码片断显示了这种 InputVerifier
的可能实现:
public class FormattedTextFieldVerifier extends InputVerifier { public boolean verify(JComponent input) { if (input instanceof JFormattedTextField) { JFormattedTextField ftf = (JFormattedTextField)input; AbstractFormatter formatter = ftf.getFormatter(); if (formatter != null) { String text = ftf.getText(); try { formatter.stringToValue(text); return true; } catch (ParseException pe) { return false; } } } return true; } public boolean shouldYieldFocus(JComponent input) { return verify(input); } }
或者,也可以调用 commitEdit
,这也会提交该值。
JFormattedTextField
本身不执行格式化,而是通过从 JFormattedTextField.AbstractFormatterFactory
实例获得的 JFormattedTextField.AbstractFormatter
实例完成格式化。通过 install
方法的方式使 JFormattedTextField.AbstractFormatter
的实例处于激活状态时会通知它们,此时 JFormattedTextField.AbstractFormatter
可以安装其所需的任何内容,通常是 DocumentFilter
。类似地,当 JFormattedTextField
不再需要 AbstractFormatter
时,它会调用 uninstall
。
JFormattedTextField
通常在获得或丢失焦点时查询 AbstractFormatterFactory
以找到 AbstractFormat
。但根据焦点丢失策略也可以更改此行为。如果焦点丢失策略是 JFormattedTextField.PERSIST
并且已编辑了 JFormattedTextField
,则在值提交之前不会查询 AbstractFormatterFactory
。类似地,如果焦点丢失策略是 JFormattedTextField.COMMIT
并且从 stringToValue
中抛出异常,则丢失或获得焦点时不查询 AbstractFormatterFactory
。
JFormattedTextField.AbstractFormatter
还负责确定何时将值提交给 JFormattedTextField
。某些 JFormattedTextField.AbstractFormatter
在每次编辑时都提供新值,而其他的则从不提交该值。可以强行从当前的 JFormattedTextField.AbstractFormatter
获得当前值,方法是调用 commitEdit
。每当在 JFormattedTextField
中按下了 return 键,就调用 commitEdit
。
如果尚未显式地设置 AbstractFormatterFactory
,则在调用 setValue
后(假定 value 是非 null 的),根据 value 类型的 Class
设置该值。例如,在以下代码中将创建一个合适的 AbstractFormatterFactory
和 AbstractFormatter
,以处理数字的格式化:
JFormattedTextField tf = new JFormattedTextField(); tf.setValue(new Number(100));
警告:由于 AbstractFormatter
通常在 Document
上安装一个 DocumentFilter
,在 JFormattedTextField
上安装一个 NavigationFilter
,所以您不应安装自己的过滤器。如果您安装了,则会看到奇怪的行为,因为将无法强制执行 AbstractFormatter
的编辑策略。
警告:此类的序列化对象与以后的 Swing 版本不兼容。当前序列化支持适用于短期存储,或适用于在运行相同 Swing 版本的应用程序之间进行 RMI(Remote Method Invocation,远程方法调用)。从 1.4 版本开始,已在 java.beans
包中添加了支持所有 JavaBeansTM 长期存储的功能。请参见 XMLEncoder
。
嵌套类摘要 | |
---|---|
static class |
JFormattedTextField.AbstractFormatter
JFormattedTextField 所使用的 AbstractFormatter 实例,用于处理从 Object 到 String 和从 String 到 Object 的转换。 |
static class |
JFormattedTextField.AbstractFormatterFactory
JFormattedTextField 使用的 AbstractFormatterFactory 实例,用来获得 AbstractFormatter 实例,依次使用该实例格式化各个值。 |
从类 javax.swing.JTextField 继承的嵌套类/接口 |
---|
JTextField.AccessibleJTextField |
从类 javax.swing.text.JTextComponent 继承的嵌套类/接口 |
---|
JTextComponent.AccessibleJTextComponent, JTextComponent.KeyBinding |
从类 javax.swing.JComponent 继承的嵌套类/接口 |
---|
JComponent.AccessibleJComponent |
从类 java.awt.Container 继承的嵌套类/接口 |
---|
Container.AccessibleAWTContainer |
从类 java.awt.Component 继承的嵌套类/接口 |
---|
Component.AccessibleAWTComponent, Component.BltBufferStrategy, Component.FlipBufferStrategy |
字段摘要 | |
---|---|
static int |
COMMIT
标识丢失焦点时,应该调用 commitEdit 的常量。 |
static int |
COMMIT_OR_REVERT
标识丢失焦点时,应该调用 commitEdit 的常量。 |
static int |
PERSIST
标识丢失焦点时,应该保留编辑值的常量。 |
static int |
REVERT
标识丢失焦点时,应该将编辑的值恢复为 JFormattedTextField 上所设当前值的常量。 |
从类 javax.swing.JTextField 继承的字段 |
---|
notifyAction |
从类 javax.swing.text.JTextComponent 继承的字段 |
---|
DEFAULT_KEYMAP, FOCUS_ACCELERATOR_KEY |
从类 javax.swing.JComponent 继承的字段 |
---|
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW |
从类 java.awt.Component 继承的字段 |
---|
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT |
从接口 javax.swing.SwingConstants 继承的字段 |
---|
BOTTOM, CENTER, EAST, HORIZONTAL, LEADING, LEFT, NEXT, NORTH, NORTH_EAST, NORTH_WEST, PREVIOUS, RIGHT, SOUTH, SOUTH_EAST, SOUTH_WEST, TOP, TRAILING, VERTICAL, WEST |
从接口 java.awt.image.ImageObserver 继承的字段 |
---|
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH |
构造方法摘要 | |
---|---|
JFormattedTextField()
创建一个没有 AbstractFormatterFactory 的 JFormattedTextField 。 |
|
JFormattedTextField(Format format)
创建一个 JFormattedTextField 。 |
|
JFormattedTextField(JFormattedTextField.AbstractFormatter formatter)
创建一个具有指定 AbstractFormatter 的 JFormattedTextField 。 |
|
JFormattedTextField(JFormattedTextField.AbstractFormatterFactory factory)
创建一个具有指定 AbstractFormatterFactory 的 JFormattedTextField 。 |
|
JFormattedTextField(JFormattedTextField.AbstractFormatterFactory factory,
Object currentValue)
创建一个具有指定 AbstractFormatterFactory 和初始值的 JFormattedTextField 。 |
|
JFormattedTextField(Object value)
创建一个具有指定值的 JFormattedTextField。 |
方法摘要 | |
---|---|
void |
commitEdit()
强制从 AbstractFormatter 获得当前值并将其设置为当前值。 |
Action[] |
getActions()
获取编辑器的命令列表。 |
int |
getFocusLostBehavior()
返回丢失焦点时的行为。 |
JFormattedTextField.AbstractFormatter |
getFormatter()
返回用于格式化和分析当前值的 AbstractFormatter 。 |
JFormattedTextField.AbstractFormatterFactory |
getFormatterFactory()
返回当前的 AbstractFormatterFactory 。 |
String |
getUIClassID()
获得 UI 的类 ID。 |
Object |
getValue()
返回最后一个有效值。 |
protected void |
invalidEdit()
用户输入无效值时调用。 |
boolean |
isEditValid()
如果所编辑的当前值有效,则返回 true。 |
protected void |
processFocusEvent(FocusEvent e)
处理所有的焦点事件,如 FocusEvent.FOCUS_GAINED 或 FocusEvent.FOCUS_LOST 。 |
protected void |
processInputMethodEvent(InputMethodEvent e)
处理所有的输入事件,如 InputMethodEvent.INPUT_METHOD_TEXT_CHANGED 或 InputMethodEvent.CARET_POSITION_CHANGED 。 |
void |
setDocument(Document doc)
将该编辑器与某个文本文档关联。 |
void |
setFocusLostBehavior(int behavior)
设置丢失焦点时的行为。 |
protected void |
setFormatter(JFormattedTextField.AbstractFormatter format)
设置当前的 AbstractFormatter 。 |
void |
setFormatterFactory(JFormattedTextField.AbstractFormatterFactory tf)
设置 AbstractFormatterFactory 。 |
void |
setValue(Object value)
设置值,该值由从当前 AbstractFormatterFactory 获得的 AbstractFormatter 进行格式化。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
字段详细信息 |
---|
public static final int COMMIT
commitEdit
的常量。如果在提交新值的过程中抛出 ParseException
,则将保留无效值。
public static final int COMMIT_OR_REVERT
commitEdit
的常量。如果在提交新值的过程中抛出 ParseException
,则将恢复原值。
public static final int REVERT
JFormattedTextField
上所设当前值的常量。
public static final int PERSIST
构造方法详细信息 |
---|
public JFormattedTextField()
AbstractFormatterFactory
的 JFormattedTextField
。使用 setMask
或 setFormatterFactory
配置 JFormattedTextField
以编辑特定的值类型。
public JFormattedTextField(Object value)
value
的类型创建一个 AbstractFormatterFactory
。
value
- JFormattedTextField 的初始值public JFormattedTextField(Format format)
JFormattedTextField
。format
包装在一个适当的 AbstractFormatter
中,然后该 AbstractFormatter 包装在一个 AbstractFormatterFactory
中。
format
- 用于查找 AbstractFormatter 的 Formatpublic JFormattedTextField(JFormattedTextField.AbstractFormatter formatter)
AbstractFormatter
的 JFormattedTextField
。该 AbstractFormatter
被放置在 AbstractFormatterFactory
中。
formatter
- 进行格式化所使用的 AbstractFormatter。public JFormattedTextField(JFormattedTextField.AbstractFormatterFactory factory)
AbstractFormatterFactory
的 JFormattedTextField
。
factory
- 用于进行格式化的 AbstractFormatterFactory。public JFormattedTextField(JFormattedTextField.AbstractFormatterFactory factory, Object currentValue)
AbstractFormatterFactory
和初始值的 JFormattedTextField
。
factory
- 用于进行格式化的 AbstractFormatterFactory
。currentValue
- 要使用的初始值方法详细信息 |
---|
public void setFocusLostBehavior(int behavior)
JFormattedTextField.COMMIT_OR_REVERT
、JFormattedTextField.REVERT
、JFormattedTextField.COMMIT
或 JFormattedTextField.PERSIST
中的一个值。注意,某些 AbstractFormatter
可能在出现更改时即进行下一步操作,所以该值无效。
如果传入的对象不是上述值之一,则将抛出 IllegalArgumentException
。
此属性的默认值为 JFormattedTextField.COMMIT_OR_REVERT
。
behavior
- 丢失焦点时的行为
IllegalArgumentException
- 如果 behavior 不是某个已知值public int getFocusLostBehavior()
COMMIT_OR_REVERT
、COMMIT
、REVERT
或 PERSIST
之一。注意,某些 AbstractFormatter
可能在出现更改时即进行下一步操作,所以该值无效。
public void setFormatterFactory(JFormattedTextField.AbstractFormatterFactory tf)
AbstractFormatterFactory
。AbstractFormatterFactory
能够返回 AbstractFormatter
的实例,它可用于格式化要显示的某个值,以及强制执行编辑策略。
如果尚未通过此方法(或构造方法)显式地设置 AbstractFormatterFactory
,则根据该值的 Class
使用 AbstractFormatterFactory
,然后使用 AbstractFormatter
。NumberFormatter
用于 Number
,DateFormatter
用于 Dates
,其他值将使用 DefaultFormatter
。
这是一个 JavaBeans bound 属性。
tf
- 用于查找 AbstractFormatter
实例的 AbstractFormatterFactory
public JFormattedTextField.AbstractFormatterFactory getFormatterFactory()
AbstractFormatterFactory
。
AbstractFormatter
的 AbstractFormatterFactory
setFormatterFactory(javax.swing.JFormattedTextField.AbstractFormatterFactory)
protected void setFormatter(JFormattedTextField.AbstractFormatter format)
AbstractFormatter
。
通常不应调用此方法,而是设置 AbstractFormatterFactory
或设置值。当 JFormattedTextField
的状态更改并且需要重置该值时,JFormattedTextField
将调用此方法。JFormattedTextField
传入从 AbstractFormatterFactory
所获得的 AbstractFormatter
。
这是一个 JavaBeans bound 属性。
format
- 进行格式化所使用的 AbstractFormattersetFormatterFactory(javax.swing.JFormattedTextField.AbstractFormatterFactory)
public JFormattedTextField.AbstractFormatter getFormatter()
AbstractFormatter
。
public void setValue(Object value)
AbstractFormatterFactory
获得的 AbstractFormatter
进行格式化。如果尚未指定任何 AbstractFormatterFactory
,则此方法会试图根据 value
的类型创建它。
此属性的默认值为 null。
这是一个 JavaBeans bound 属性。
value
- 要显示的当前值public Object getValue()
AbstractFormatter
的编辑策略,此方法可能不会返回当前值。可通过调用 commitEdit
后调用 getValue
来获得当前编辑的值。
public void commitEdit() throws ParseException
AbstractFormatter
获得当前值并将其设置为当前值。 如果当前没有已安装的 AbstractFormatter
,则此方法无效。
ParseException
- 如果 AbstractFormatter
无法格式化当前值public boolean isEditValid()
AbstractFormatter
进行管理,并且没有针对它的公共 setter。
protected void invalidEdit()
protected void processInputMethodEvent(InputMethodEvent e)
InputMethodEvent.INPUT_METHOD_TEXT_CHANGED
或 InputMethodEvent.CARET_POSITION_CHANGED
。
e
- InputMethodEvent
InputMethodEvent
protected void processFocusEvent(FocusEvent e)
FocusEvent.FOCUS_GAINED
或 FocusEvent.FOCUS_LOST
。
Component
中的 processFocusEvent
e
- FocusEvent
FocusEvent
public Action[] getActions()
JTextField
中的 getActions
public String getUIClassID()
JTextField
中的 getUIClassID
JComponent.getUIClassID()
public void setDocument(Document doc)
JTextField
中的 setDocument
doc
- 要显示/编辑的文档JTextComponent.getDocument()
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。