JTextField数字问题 (swing控件)(高手进)

wdxgayjl 2008-01-31 12:29:29
搜索了一下,没有好的方法,所以问一下

JTextField (swing控件)

1.只能输入数字,屏蔽输入其他
2.只能输入整数(位数不限)

高手帮小弟解答下!!!急!!!
...全文
394 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
IamHades 2008-02-03
  • 打赏
  • 举报
回复
赞同3楼的方法,用文档校验是最优秀的做法,而且又是最简单的,我们项目的很多有特殊要求的输入框都是自己写document来限制输入的。
a1470 2008-02-03
  • 打赏
  • 举报
回复
。。。监听器而已
leon_xiao 2008-02-02
  • 打赏
  • 举报
回复
up
白云冰河 2008-02-01
  • 打赏
  • 举报
回复
直接用JFormattedTextField不好吗
craky 2008-02-01
  • 打赏
  • 举报
回复
如有特殊需求,自己再改改

package craky;

import java.awt.Toolkit;

import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;

/**
* 只允许输入数字的JTextField
* @author 003
*/
public class NumberField extends JTextField
{
/**
* serialVersionUID
*/
private static final long serialVersionUID = -2732387087480277531L;

/**
* 最大值
*/
private int maxValue = Integer.MAX_VALUE;

/**
* 最小值
*/
private int minValue = Integer.MIN_VALUE;

/**
* 宽度
*/
private int maxLength = 0;

/**
* 构造方法
* @param maxLength 最大宽度
*/
public NumberField(int maxLength)
{
super();
this.maxLength = maxLength;
}

/**
* 构造方法
* @param minValue 最小值
* @param maxValue 最大值
*/
public NumberField(int minValue, int maxValue)
{
super();
this.minValue = minValue;
this.maxValue = maxValue;
}

/**
* 构造方法
* @param maxLength 最大宽度
* @param minValue 最小值
* @param maxValue 最大值
*/
public NumberField(int maxLength, int minValue, int maxValue)
{
super();
this.maxLength = maxLength;
this.minValue = minValue;
this.maxValue = maxValue;
}

/**
* 设置最大值
* @param maxValue 最大值
*/
public void setMaxValue(int maxValue)
{
this.maxValue = maxValue;
}

/**
* 获取最大值
* @return 最大值
*/
protected int getMaxValue()
{
return this.maxValue;
}

/**
* 设置最小值
* @param minValue 最小值
*/
public void setMinValue(int minValue)
{
this.minValue = minValue;
}

/**
* 获取最小值
* @return 最小值
*/
protected int getMinValue()
{
return this.minValue;
}

/**
* 获取当前值
* @return 当前值
*/
public int getValue()
{
int retVal = 0;

try
{
retVal = Integer.parseInt(getText());

if(retVal > maxValue)
{
retVal = maxValue;
}
else if(retVal < minValue)
{
retVal = minValue;
}
}
catch(NumberFormatException e)
{
retVal = 0;
}

return (new Integer(retVal)).intValue();
}

/**
* 设置当前值
* @param value 当前值
*/
public void setValue(Object value)
{
if(value == null || value.equals(""))
{
setText("0");
}
else
{
setText(value.toString());
}
}

/**
* 创建缺省模板
*/
protected Document createDefaultModel()
{
return new NumberDocument(this);
}

/**
* 文本控制类
* @author zhanglitao
*/
protected class NumberDocument extends PlainDocument
{
/**
* serialVersionUID
*/
private static final long serialVersionUID = -5643002098563548951L;

/**
* NumberField对象
*/
NumberField field;

/**
* 构造方法
* @param field NumberField对象
*/
public NumberDocument(NumberField field)
{
this.field = field;
}

/**
* 插入规则
*/
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException
{
if(str == null || str.equals(""))
{
return;
}

char[] source = str.toCharArray();
char[] result = new char[source.length];

int j = 0;

for(int i = 0; i < result.length; i++)
{
if(Character.isDigit(source[i]))
{
result[j++] = source[i];
}
else
{
Toolkit.getDefaultToolkit().beep();
}
}

StringBuffer sb = new StringBuffer();
sb.append(field.getText());
sb.insert(offs, new String(result, 0, j));

try
{
int value = Integer.parseInt(sb.toString());

boolean flag1 = maxLength > 0 && this.getLength() < maxLength && value <= field.getMaxValue() && value >= field.getMinValue();
boolean flag2 = maxLength == 0 && value <= field.getMaxValue() && value >= field.getMinValue();

if(flag1 || flag2)
{
super.insertString(offs, new String(result, 0, j), a);
}
}
catch(NumberFormatException ex)
{}
}
}
}

yiyi_wx 2008-01-31
  • 打赏
  • 举报
回复
做个监听器,光标离开时处理事件
olivesoup 2008-01-31
  • 打赏
  • 举报
回复
1.为你的jTextField添加Document属性

jTextField.setDocument(new NumericDocument());


2.NumericDocument类代码如下

public class NumericDocument extends PlainDocument {
private static final long serialVersionUID = 1L;

public NumericDocument(){
}

public void insertString(int offset, String str, AttributeSet a) {
try{
for (int i=0; i<str.length(); i++) {
char ch = str.charAt(i);
if (this.commaFlg){
if (Character.isDigit(ch) == false && Character.toString(ch).equals(",") == false) {
return;
}
}else{
if (Character.isDigit(ch) == false ) {
return;
}
}
}
super.insertString(offset, str, a);
}
catch(BadLocationException e) {
}
}
}


dracularking 2008-01-31
  • 打赏
  • 举报
回复
构造一个JTextField的子类 让其覆盖createDefaultModel方法 限制其输入内容
即使通过剪切板复制或程序修改

class OnlyIntegerField extends JTextField {

public OnlyIntegerField(int cols) {
super(cols);
}

protected Document createDefaultModel() {
return new UpperCaseDocument();
}

static class UpperCaseDocument extends PlainDocument {

public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {

if (str == null) {
return;
}
int length = 0;
char[] upper = str.toCharArray();
for (int i = 0; i < upper.length; i++) {
if (upper[i] >= '0' && upper[i] <= '9') {
upper[length++] = upper[i];
}
}
super.insertString(offs, new String(upper, 0, length), a);
}
}
}

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧