JFormattedTextField在JTextField基础上增加了formatter和一个value对象。formatter可以将value转换成显示的文本,或把文本转换成value。
1、创建和初始化
rateField = new JFormattedTextField(percentFormat);
rateField.setValue(new Double(rate));
rateField.setColumns(10);
rateField.addPropertyChangeListener("value", this);
numPeriodsField = new JFormattedTextField();
numPeriodsField.setValue(new Integer(numPeriods));
numPeriodsField.setColumns(10);
numPeriodsField.addPropertyChangeListener("value", this);
paymentField = new JFormattedTextField(paymentFormat);
paymentField.setValue(new Double(payment));
paymentField.setColumns(10);
aymentField.setEditable(false);
paymentField.setForeground(Color.red);
...
percentFormat = NumberFormat.getNumberInstance();
percentFormat.setMinimumFractionDigits(2);
paymentFormat = NumberFormat.getCurrencyInstance();
以上的构造器中的使用的参数是java.text.Format,formatter使用该对象进行value和text间的转换。numPeriodsField使用一个无参的构造器,因为默认formatter会处理Integer型对象的格式化工作,但不使用于浮点型的对象。
2、设置和获得value
注意:FormattedText的value和text是两种不同的属性,而且value继text后产生。text就是文本框中实时显示的内容,所以value不一定会立刻反映最新的text值,而且在text的变化提交前,value值不会变化。
设置value值有两种方法:setValue或commitEdit。
commitEdit方法在两种情况下会被自动调用:
(1)用户在文本框中回车;
(2)文本框失去焦点。可以通过调用setFocusLostBehavior设置不同的结果。
当调用setValue方法后,value值会变成指定值,同时text会随之变化;不主张调用setText方法,因为通过该方法,text将会变化,但这个变化不会反应到value,导致text和value得不一致。
3、定制format
可以通过调用工厂类DateFormat或NumberFormat相关方法获得Format对象,或者通过实例化SimpleDateFormat获得。Formatters使用这些format对象完成value和text的转变,这些formatter一般都是InternationalFormatter的子类(除MaskFormatter外),如DateFormatter、NumberFormatter。
4、使用MaskFormatter
该formatter能严格明确文本框的某个位置哪些字符有效。
zipField = new JFormattedTextField(
createFormatter("#####"));
...
protected MaskFormatter createFormatter(String s) {
MaskFormatter formatter = null;
try {
formatter = new MaskFormatter(s);
} catch (java.text.ParseException exc) {
System.err.println("formatter is bad: " + exc.getMessage());
System.exit(-1);
}
return formatter;
}
Character
Description
# |
Any valid number (Character.isDigit
). |
'
(single quote)
|
Escape character, used to escape any of the
special formatting characters. |
U |
Any character (Character.isLetter
). All
lowercase letters are mapped to uppercase. |
L |
Any character (Character.isLetter
). All
uppercase letters are mapped to lowercase. |
A |
Any character or number (Character.isLetter
or Character.isDigit
). |
? |
Any character
(Character.isLetter
). |
* |
Anything. |
H |
Any hex character (0-9, a-f or A-F). |
5、定制formatter和使用formatter工厂
使用formatter时牢记formater最好和JFormattedTextField一一关联。可以通过以下方式设置JFormattedTextField使用的formatter:
(1)使用JFormattedTextField带Format参数的构造函数;
(2)使用JFormattedTextField带JFormattedTextField.AbstractFormatter参数的构造函数;
(3)对一个尚且没有设置format、formatter、formatterFactory的JFormattedTextField调用setValue方法,然后根据value的类型由默认的format factory给该文本框分配一个合适的formatter。
(4)为JFormattedTextField设置formatter factory,可以通过构造器或setFormatterFactory,由该factory返回相应的formatter,这种方式最灵活。
分享到:
相关推荐
JFormattedTextField是Swing库提供的一个带有格式的文本输入框组件。它允许用户输入特定格式的数据,例如日期、时间、货币等,并在用户输入时进行格式验证。
自动文本 Java Swing 库,允许将自动完成的可能性添加到文本组件(JTextComponent - JTextField - JFormattedTextField 等)
格式化字段:JFormattedTextField 口令字段:JPasswordField Spinner:JSpinner 分隔符:JSeparator 文本窗格:JTextPane 编辑器窗格:JEditorPane 树:JTree 表:JTable 菜单栏:JMenuBar 菜单:JMenu 菜单项:...
·新增了讲解JFormattedTextField和输入验证的章节 ·Mac OS X的编程介绍和范例 ·SDK 1.4引入的输入焦点系统 ·可插拔的外观风格 ·SDK 1.4引入的新布局管理器SpringLayout ·总结每个组件重要功能的属性列表 ·SDK...
5.12.2 使用JFormattedTextField限制日期 输入 244 5.13 本章总结 245 第6章 企业快信(Swing+JavaDB实现) 246 教学视频:1小时35分 6.1 企业快信概述 247 6.2 系统分析 247 6.2.1 需求分析 247 6.2.2 可行性研究 ...
第1章 Java概述 1 1.1 Java语言的发展简史 2 1.2 Java的竞争对手及各自优势 4 1.2.1 C#简介和优势 4 1.2.2 Ruby简介和优势 4 1.2.3 Python的简介和优势 5 ...学生提问:当我们使用编译C程序时,不仅需要指定存放...
第一篇 起步篇 第1章 初识Java 3 1.1 Java简介 3 1.1.1 Java的不同平台 3 1.1.2 Java发展的历程 3 1.1.3 Java的特点 4 1.2 安装开发工具包 5 1.2.1 下载JDK 5 1.2.2 安装JDK 6 ...
“Swing toolkit to access a database of a table” 该项目提供了屏幕上的一些组件(JFormattedTextField、JComboBox、JRadioButton、JcheckBox和JtextArea)与数据库表的字段之间的数据绑定机制。 该项目的目的:...
这是JFormattedTextField的简单扩展。 test.DateTextFieldTest.java是演示MyDateTextField用法的测试应用程序。 此日期部分的主要目的: 让用户仅在其其他表单字段的后面键入日期。 无需使用鼠标。 让用户只输入日...
通过带有 NumberFormatter 的 jFormattedTextField 读入年份,并通过基于年份的 JSpinner 读入存储期。任务 5 MDI 文件,带有用于葡萄酒入场的表格窗口。 和功能菜单项。练习 6 练习 5 中的应用程序