|
|||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
javax.swing
类 JFormattedTextField
java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent javax.swing.text.JTextComponent javax.swing.JTextField javax.swing.JFormattedTextField
- 所有已实现的接口:
- ImageObserver, MenuContainer, Serializable, Accessible, Scrollable, SwingConstants
-
public class JFormattedTextField
- extends JTextField
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
。
- 从以下版本开始:
- 1.4
嵌套类摘要 | |
---|---|
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 |
字段详细信息 |
---|
COMMIT
public static final int COMMIT
-
标识丢失焦点时,应该调用
commitEdit
的常量。如果在提交新值的过程中抛出ParseException
,则将保留无效值。- 另请参见:
-
setFocusLostBehavior(int)
, 常量字段值
COMMIT_OR_REVERT
public static final int COMMIT_OR_REVERT
-
标识丢失焦点时,应该调用
commitEdit
的常量。如果在提交新值的过程中抛出ParseException
,则将恢复原值。- 另请参见:
-
setFocusLostBehavior(int)
, 常量字段值
REVERT
public static final int REVERT
-
标识丢失焦点时,应该将编辑的值恢复为
JFormattedTextField
上所设当前值的常量。- 另请参见:
-
setFocusLostBehavior(int)
, 常量字段值
PERSIST
public static final int PERSIST
-
标识丢失焦点时,应该保留编辑值的常量。
- 另请参见:
-
setFocusLostBehavior(int)
, 常量字段值
构造方法详细信息 |
---|
JFormattedTextField
public JFormattedTextField()
-
创建一个没有
AbstractFormatterFactory
的JFormattedTextField
。使用setMask
或setFormatterFactory
配置JFormattedTextField
以编辑特定的值类型。
JFormattedTextField
public JFormattedTextField(Object value)
-
创建一个具有指定值的 JFormattedTextField。这将根据
value
的类型创建一个AbstractFormatterFactory
。- 参数:
-
value
- JFormattedTextField 的初始值
JFormattedTextField
public JFormattedTextField(Format format)
-
创建一个
JFormattedTextField
。format
包装在一个适当的AbstractFormatter
中,然后该 AbstractFormatter 包装在一个AbstractFormatterFactory
中。- 参数:
-
format
- 用于查找 AbstractFormatter 的 Format
JFormattedTextField
public JFormattedTextField(JFormattedTextField.AbstractFormatter formatter)
-
创建一个具有指定
AbstractFormatter
的JFormattedTextField
。该AbstractFormatter
被放置在AbstractFormatterFactory
中。- 参数:
-
formatter
- 进行格式化所使用的 AbstractFormatter。