TextField只能输入数字问题

sysmaster 2004-07-11 05:22:24
如何使TextField只能输入数字?
...全文
1375 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tempzzz 2004-07-12
  • 打赏
  • 举报
回复
event.consume();
落了一对括号
tempzzz 2004-07-12
  • 打赏
  • 举报
回复
刚学习JAVA,正好看到这里,希望对你有帮助
textField.addKeyListener(new
KeyAdapter()
{
public void keyTyped(KeyEvent event)
{
char ch=event.getKeyChar();
if(ch<'0'||ch>'9')
event.consume;
}
}
});
摘于CoreJava第五版P308
hl_longman 2004-07-12
  • 打赏
  • 举报
回复
可以用掩码吧?1
azqf121 2004-07-12
  • 打赏
  • 举报
回复
提供一个全类,完全实现只输入数字

/**
* <p>Description: JNumberField 数字格式输入框</p>
* @version 1.0
*/

package jujin.common.swing;

import jujin.common.base.*;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.*;

/**
* 本类为一文本输入对话框,是只充许输入数字格式的文本输入框
*/
public class JNumberField extends JTextField
implements ActionListener, FocusListener
{
/**
* 空构造函数
*/
public JNumberField()
{
this(true);
}

/**
* 带参数构造函数
* @param addAction 是否添加监听
*/
public JNumberField(boolean addAction)
{
this(0, 16, addAction);
}
/**
* 带参数构造函数
* @param declen 小数位长度
*/
public JNumberField(int decLen)
{
this(decLen, true);
}

/**
* 带参数构造函数
* @param declen 小数位长度
* @param addAction 是否添加监听
*/
public JNumberField(int decLen, boolean addAction)
{
this(decLen, 16, addAction);
}

/**
* 带参数构造函数
* @param declen 小数位长度
* @param maxlen 最大长度(含小数位)
*/
public JNumberField(int decLen, int maxLen)
{
this(decLen, maxLen, true);
}

/**
* 带参数构造函数
* @param declen 小数位长度
* @param maxlen 最大长度(含小数位)
* @param addAction 是否添加监听
*/
public JNumberField(int decLen, int maxLen, boolean addAction)
{
//初始大小
setPreferredSize(new Dimension(150, 25));
setDocument(new NumberDocument(decLen, maxLen));
//右对齐
super.setHorizontalAlignment(JTextField.RIGHT);
if (addAction)
{
addActionListener(this);
}
//焦点监听
addFocusListener(this);
}

/**
* 带参数构造函数
* @param declen 输入框长度
* @param maxlen 最大长度(含小数位)
* @param minRange 最小值
* @param maxRange 最大值
* @param addAction 是否添加监听
*/
public JNumberField(int decLen, int maxLen, double minRange, double maxRange,
boolean addAction)
{
setPreferredSize(new Dimension(150, 25));
setDocument(new NumberDocument(decLen, maxLen, minRange, maxRange));
//右对齐
super.setHorizontalAlignment(JTextField.RIGHT);
if (addAction)
{
addActionListener(this);
}
//焦点监听
addFocusListener(this);
}

public void actionPerformed(ActionEvent e)
{
//强制下一控件得到焦点
transferFocus();
}

/**
* 实现的焦点监听器接口
*/
public void focusGained(FocusEvent e)
{
//选择所有
selectAll();
}

public void focusLost(FocusEvent e)
{
}

public static void main(String[] args)
{
SwingUtil swingUtil = new SwingUtil();
swingUtil.setLookAndFeel();
JFrame frame = new JFrame();
//EXIT_ON_CLOSE == 3
frame.setDefaultCloseOperation(3);
frame.setTitle("JNumberField Demo");
frame.getContentPane().setLayout(new FlowLayout());
frame.getContentPane().add(new JNumberField(), BorderLayout.CENTER);
frame.getContentPane().add(new JNumberField(10), BorderLayout.CENTER);
frame.getContentPane().add(new JNumberField(10, 16), BorderLayout.CENTER);
frame.getContentPane().add(new JNumberField(10, 16, -10, 100, false),
BorderLayout.CENTER);
frame.setSize(400, 320);
//swingUtil.setCenter(frame);
}

}

/**
* 数字框类
*/
class NumberDocument extends PlainDocument
{
int maxLength = 16;
int decLength = 0;
double minRange = Double.MIN_VALUE;
double maxRange = Double.MAX_VALUE;

/**
* 空构造函数
*/
public NumberDocument() {}
/**
* 带参数构造函数
* @param decLen int 小数位长度
* @param maxLen int 最大长度(含小数位)
*/
public NumberDocument(int decLen, int maxLen)
{
maxLength = maxLen;
decLength = decLen;
}

/**
* 带参数构造函数
* @param decLen int 小数位长度
* @param maxLen int 最大长度(含小数位)
* @param minRange double 最小值
* @param maxRange double 最大值
*/
public NumberDocument(int decLen, int maxLen, double minRange,
double maxRange)
{
this(decLen, maxLen);
this.minRange = minRange;
this.maxRange = maxRange;
}

/**
* 带参数构造函数
* @param decLen int 小数位长度
*/
public NumberDocument(int decLen)
{
decLength = decLen;
}


/**
* 添加字符串
* @param offset - the offset into the document to insert the content >= 0
* @param s - 要插入的字串
* @param a - 联合插入内容的属性
*/
public void insertString(int offset, String s, AttributeSet a) throws
BadLocationException
{
int len = getLength();
String str = getText(0, len);
int decPos = str.indexOf(".");
if (
s.equals("F") || s.equals("f") || s.equals("D") || s.equals("d")
|| (str + s).length() > maxLength || (decPos > -1 && offset > decPos
&& ((str.substring(decPos + 1)) + s).length() > decLength)
|| (str.trim().equals("0") && !s.substring(0, 1).equals(".")
&& offset != 0) || (s.equals(".") && decLength == 0)
|| (s.indexOf(".") > -1
&& s.substring(s.indexOf(".") + 1).length() > decLength))
{
Toolkit.getDefaultToolkit().beep();
return;
}
try
{
str = str.substring(0, offset) + s + str.substring(offset, len);
if (!str.equals("-") || (str.equals("-") && minRange <= 0))
{
double d = Double.parseDouble(str);
if (d < minRange || d > maxRange)
{
throw new Exception();
}
}
}
catch (Exception e)
{
Toolkit.getDefaultToolkit().beep();
return;
}
super.insertString(offset, s, a);
}

}
maowu 2004-07-12
  • 打赏
  • 举报
回复
用 JFormattedTextField

zipField = new JFormattedTextField(
createFormatter("#####"));
qybao 2004-07-11
  • 打赏
  • 举报
回复
加键盘监听器

KeyListener kl = new KeyListener() {
public void keyPressed(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {
if (e.getKeyChar() < '0' ||
e.getKeyChar() > '9') {
e.setKeyChar((char)0);
return;
}
}
};

your_TextField = new TextField();
your_TextField.addKeyListener(kl);

shine333 2004-07-11
  • 打赏
  • 举报
回复
具体代码可能api有些出入,

addKeyListener(new KeyAdapter(){
public void keyTyped(KeyEvent e) {
int keyCode = e.getKeyCode();
switch (keyCode) {//判断按下的是哪个键
case KeyEvent.VK_0:......
case KeyEvent.VK_9:
break;
default:
e.consume(); //关键,屏蔽掉非法输入
}
}
});
hui3zhihui 2004-07-11
  • 打赏
  • 举报
回复
有两种方法:
一、你可以判断AscII的值
二、使用格式化

62,614

社区成员

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

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