如何在KeyEvent事件中只对特定字符进行处理?

fyjin99 2008-11-28 01:55:28
public class NumberText
extends TextField{
public NumberText() throws HeadlessException {
this.enableEvents(AWTEvent.KEY_EVENT_MASK);
}

public void processKeyEvent(KeyEvent e) {
if (e.getKeyCode() < KeyEvent.VK_0 || e.getKeyCode() > KeyEvent.VK_9)
{
//??如何在这里实现代码,使符合条件的字符(非数字)不在输入框中显示出来?
}
}
}
问题如上,就是通过一个继承TextField的类来实现只输入数字,如何在processKeyEvent(KeyEvent e)编写相应的处理代码?
...全文
197 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
fyjin99 2008-12-08
  • 打赏
  • 举报
回复
泪奔!!!我和JBuilder9结了什么仇啊!!我就是不能用2和19楼的方法!!TNND!!
破Feel 2008-12-07
  • 打赏
  • 举报
回复
学习了
2楼和19楼的都好用,我测试过了
fyjin99 2008-12-06
  • 打赏
  • 举报
回复
不好意思,不行啊!
我的super.insertString(offs, str, a); 不能调用!
我建了一个PalinDocument的实例,也不能调用insertString(int offs, String str, AttributeSet a)函数。
不知道我为什么用不了PlainDocument!!!
duhongltz 2008-12-05
  • 打赏
  • 举报
回复
最后一句 super.insertString(offs, str, a);
duhongltz 2008-12-05
  • 打赏
  • 举报
回复
catch 后面没加 exception 你加上
duhongltz 2008-12-05
  • 打赏
  • 举报
回复
2楼是最佳解决办法 他的代码不行么?
public class UpperCaseTextField extends JTextField {
public UpperCaseTextField() {
super();
}

protected Document createDefaultModel() {
return new PlainDocument() {
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
if (str == null || str == "")
return;
String oldString = getText(0, getLength());
String newString = oldString.substring(0, offs) + str + oldString.substring(offs);
//if (newString.length() < 12) {
//super.insertString(offs, str.toUpperCase(), a);
//}
try{
Integer.parseInt(newString);
}catch{
return;
}
super.insertString(offs, str.toUpperCase(), a);
}
};
}
}

与2楼大同小异 你试试
fyjin99 2008-12-05
  • 打赏
  • 举报
回复
救命啊!!!救命啊!!!!
fyjin99 2008-12-04
  • 打赏
  • 举报
回复
:-D还是不行啊!各位帮忙啊!
cleverboy 2008-12-03
  • 打赏
  • 举报
回复
给你个方法, 你参考下
protected void verifyTextHandler(VerifyEvent e){
// 几种情况,输入控制键,输入中文,输入字符,输入数字
// 正整数验证
Pattern pattern = Pattern.compile("[0-9]\\d*");
Matcher matcher = pattern.matcher(e.text);
if (matcher.matches()) // 处理数字
e.doit = true;
else if (e.text.length() > 0) // 有字符情况,包含中文、空格
e.doit = false;
else
// 控制键
e.doit = true;
}
用正则吧!
fyjin99 2008-12-03
  • 打赏
  • 举报
回复
帮帮忙啊(:-……
fyjin99 2008-12-03
  • 打赏
  • 举报
回复
帮忙啊!:-D
赛铁花 2008-12-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 fyjin99 的帖子:]
public class NumberText
extends TextField{
public NumberText() throws HeadlessException {
this.enableEvents(AWTEvent.KEY_EVENT_MASK);
}

public void processKeyEvent(KeyEvent e) {
if (e.getKeyCode() < KeyEvent.VK_0 || e.getKeyCode() > KeyEvent.VK_9)
{
//??如何在这里实现代码,使符合条件的字符(非数字)不在输入框中显示出来?
}
}
}
问题如上,就是通过一个继承TextField的类来实现只输入数字…
[/Quote]

import java.awt.AWTEvent;
import java.awt.HeadlessException;
import java.awt.TextField;
import java.awt.event.KeyEvent;

public class NumberText extends TextField {
public NumberText() throws HeadlessException {
this.enableEvents(AWTEvent.KEY_EVENT_MASK);
}

public void processKeyEvent(KeyEvent e) {
if (e.getKeyCode() < KeyEvent.VK_0 || e.getKeyCode() > KeyEvent.VK_9) {

//如果为非数字,把文本框的最后一个字去掉后重新设置文本框不就OK了
this.setText(this.getText().substring(0, this.getText().length()));
}
}
}
gongfuliang 2008-12-02
  • 打赏
  • 举报
回复
你将四楼的代码全部拷贝了???

@Override只是在1.5以后才可以这么用的,把这些都去掉
fyjin99 2008-12-02
  • 打赏
  • 举报
回复
jdk1.4
fyjin99 2008-12-02
  • 打赏
  • 举报
回复
帮帮忙啊O(∩_∩)O
fyjin99 2008-12-02
  • 打赏
  • 举报
回复
@Override没有写进去,就是不能用。我建了一个PalinDocument的实例,也不能调用insertString(int offs, String str, AttributeSet a)函数。大家帮帮忙啊!
gongfuliang 2008-12-02
  • 打赏
  • 举报
回复
你用的JDK版本是多少?
fyjin99 2008-12-01
  • 打赏
  • 举报
回复
我继承的是TextField,没有使用SWing组件,有没有针对TextField的方法啊?
fyjin99 2008-12-01
  • 打赏
  • 举报
回复
大家帮帮忙啊!!PalinDocument的insertString(int offs, String str, AttributeSet a)函数明明是有的,就是不能调用。
gongfuliang 2008-12-01
  • 打赏
  • 举报
回复
都什么啊,还整成静态的了
加载更多回复(4)

62,614

社区成员

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

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