java文本框默认格式化,XJL:Swing中的格式化文本框

首先演示一个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方法来改变:

3a683007fcb6dec51d3ce9e0c27de4f9.gif

图 17.5

c78a17da9d86b4ce2deccd03ba63e312.gif

图 17.6

如果输入“10”这个合法的数字,单击“计算”按钮即可算出正确的值:

e02ad84fd7471c80f1f1841a69744504.gif

图 17.7

7d6ccf474dd1e3dffce56b7324b5a3b7.gif

图 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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值