首先演示一个NumberFormatter的例子,在这个例子中要求用户输入一个数字,单击按钮后将用户输入的数字乘2以后重新赋值给输入框。用户输入的数字必须大于0,小于100。
package com.cownew.Char19;
import java.awt.Font;
import java.awt.Rectangle;
import java.math.BigDecimal;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFormattedTextField;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.text.NumberFormatter;
import javax.swing.JTextField;
public class NumberFormaterDialog1 extends JDialog
{
private JPanel jContentPane = null;
private JFormattedTextField numTxtField = null;
private JButton jButton = null;
private JTextField jTextField = null;
private JFormattedTextField getNumTxtField()
{
if (numTxtField == null)
{
NumberFormatter numFormater = new NumberFormatter();
numFormater.setMaximum(new BigDecimal(100));
numFormater.setMinimum(new BigDecimal(0));
numTxtField = new JFormattedTextField(numFormater);
numTxtField.setBounds(new Rectangle(56, 38, 154, 24));
}
return numTxtField;
}
private JButton getJButton()
{
if (jButton == null)
{
jButton = new JButton();
jButton.setBounds(new Rectangle(78, 80, 81, 36));
jButton.setFont(new Font("Dialog", Font.PLAIN, 18));
jButton.setText("计算");
jButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e)
{
BigDecimal oldValue = (BigDecimal) getNumTxtField()
.getValue();
if (oldValue != null)
{
getNumTxtField().setValue(
oldValue.multiply(new BigDecimal(2)));
}
else
{
JOptionPane.showMessageDialog(
NumberFormaterDialog1.this,"值非法");
}
}
});
}
return jButton;
}
private JTextField getJTextField()
{
if (jTextField == null)
{
jTextField = new JTextField();
jTextField.setBounds(new Rectangle(176, 83, 76, 22));
}
return jTextField;
}
public static void main(String[] args)
{
NumberFormaterDialog1 dlg = new NumberFormaterDialog1();
dlg.show();
}
public NumberFormaterDialog1()
{
super();
initialize();
}
private void initialize()
{
this.setSize(300, 200);
this.setContentPane(getJContentPane());
this.setTitle("JFrame");
}
private JPanel getJContentPane()
{
if (jContentPane == null)
{
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(getNumTxtField(), null);
jContentPane.add(getJButton(), null);
jContentPane.add(getJTextField(), null);
}
return jContentPane;
}
}
当我们输入-3这个无效值的时候是允许输入的,但是当鼠标焦点移动到另外的控件的时候,“-3”就会消失。这个行为可以通过NumberFormatter 的setAllowsInvalid方法来改变:
  XJL:Swing中的格式化文本框_第1张图片
图 17.5
  XJL:Swing中的格式化文本框_第2张图片
图 17.6
如果输入“10”这个合法的数字,单击“计算”按钮即可算出正确的值:
  XJL:Swing中的格式化文本框_第3张图片
图 17.7
  XJL:Swing中的格式化文本框_第4张图片
图 17.8
案例系统中的com.cownew.ctk.ui.swing.JNumberTextField就是为了方便使用而从JFormattedTextField派生的一个数字输入控件。
DateFormatter的使用也是类似的,也允许设置最大最小值,实际上只要从InternationalFormatter派生的类,并且数据类型实现了Comparable接口都可以设置极值。
MaskFormatter允许开发人员使用掩码指定更加复杂的校验规则。掩码是一串特殊的字符串,每个字符的含义如下表所示:
字符
说明
#
匹配任何数字字符
'
转义符,用来将格式字符当成普通字符用
U
任意大写字母
L
任意小写字母
A
任意数字或者字母
?
任何字母
*
任何字符
H
任何十六进制字符 (0-9, a-f or A-F).
实例化时指定其掩码即可:
MaskFormatter formatter = new MaskFormatter("0x***");
formatter.setValidCharacters("0123456789abcdefABCDEF");
还允许为掩码设定占位符,这样可用性更好:
MaskFormatter formatter = new MaskFormatter("###-####");
formatter.setPlaceholderCharacter('_');
formatter.getDisplayValue(tf, "123");
职场 格式化 文本框

0

收藏

上一篇:Swing中的滚动条 下一篇:盖茨北大演讲被闹场2007年4月...
XJL:Swing中的格式化文本框_第6张图片
cownew

289篇文章,54W+人气,0粉丝

XJL:Swing中的格式化文本框_第7张图片

Ctrl+Enter 发布

发布

取消

推荐专栏更多

XJL:Swing中的格式化文本框_第8张图片
基于Python的DevOps实战

自动化运维开发新概念

共20章 | 抚琴煮酒

¥51.00 494人订阅
订   阅
XJL:Swing中的格式化文本框_第9张图片
微服务技术架构和大数据治理实战

大数据时代的微服务之路

共18章 | 纯洁微笑

¥51.00 688人订阅
订   阅

猜你喜欢

我的友情链接 搭建了一个多项目、插件化的ASP.net MVC开发框架 运维自动化-Ansible ( 一 ) IntelliJ Idea 常用快捷键列表 自动化运维工具Ansible详细部署 Qt学习之路(17): Qt标准对话框之QMessageBox 如何在linux下解压缩rar格式的文件压缩包 自动化运维工具Ansible实战(五)Playbooks剧本使用 自动化运维工具SaltStack详细部署 Jenkins与Docker的自动化CI/CD实战 MBR与GPT分区格式(实例-创建大于2TB的分区) Qt学习之路(15): Qt标准对话框之QFileDialog JavaScript基础 从Preact中了解React组件和hooks基本原理 智能合约编程语言-solidity快速入门(下) Android中适配器的notifyDataSetChanged()为何有时不刷新 从hook开始聊聊那些windows内核数据结构 Scala的actor 正则性能调优 windows下kafka+ELK的日志系统
XJL:Swing中的格式化文本框_第10张图片
XJL:Swing中的格式化文本框_第11张图片

扫一扫,领取大礼包

0

分享
XJL:Swing中的格式化文本框_第12张图片
cownew
XJL:Swing中的格式化文本框_第13张图片