编写一个能够创建创建文本框并限制输入内容的类。

Fly_Me2014 2015-03-26 09:21:23
java.awt.TextField创建的文本框不够理想,想创建一个新的类。

想要实现的功能:
1、使用该类时,能够自动新建一个TextField。
2、TextField添加键盘事件,随时监听键盘的输入,并对输入进行限制。

代码如下:

import java.awt.TextField;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class TextBox extends TextField {

char b, e;
int l;

// 调用该类时,创建一个TextField对象
TextField textbox = new TextField();

// 不带参数的构造方法
TextBox() {
super();
}

// 带参数的构造方法,用于限制输入字符,以及输入长度。
/**
* begin:起始字符, end:结束字符 ,limit:字符串长度
**/
public TextBox(char begin, char end, int limit) {

this.b = begin;
this.e = end;
this.l = limit;

System.out.println("已经进入限制方法!");

textbox.addKeyListener(new KeyAdapter() {

public void keyTyped(KeyEvent e) {

// ====限制动作star======================================
char keyLimit = e.getKeyChar();

System.out.println("已经进入键盘事件内部");

// 限制输入
if (keyLimit < begin || keyLimit > end) {
if (keyLimit != '\n')
e.setKeyChar('\0');
}
// 限制字符串长度
String s = textbox.getText();
if (s.length() > limit)
e.consume();
// ====限制动作end=======================================
}
});

}
}

但是,这个方法并不起作用。
控制台显示键盘事件都没有进去过。

什么原因,求解。
...全文
169 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Fly_Me2014 2015-03-27
  • 打赏
  • 举报
回复
引用 1 楼 zys59 的回复:
你的思路有问题。要清楚,你应该自定义一个类,这个类继承自TextField,有一些你需要的限制,也就是说,这个类自身就是一个TextField。而不是你调用这个类去生成了一个TextField。 你要的限制功能是什么我不知道,不过,基本思路就是,如果输入不符合要求,就调用KeyEvent的consume()方法。 下面是我写的一个基本的框架。

import java.awt.TextField;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class MyTextField extends TextField implements KeyListener {
	private int maxlength;
	public MyTextField(int maxlength) {
		this.maxlength = maxlength;
		this.addKeyListener(this);
	}
	@Override
	public void keyTyped(KeyEvent e) {
		//这里根据限制要求做判断
		if(this.getText().length() == this.maxlength){
			//这里应该停止KeyEvent事件的分发,TextField中的内容不再变化	
			e.consume();
		}
	}
	@Override
	public void keyPressed(KeyEvent e) {
	}
	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub

	}
}
下面是测试类。

import javax.swing.JFrame;
public class Main extends JFrame {
	public static void main(String[] args) {
		new Main().setVisible(true);
	}	

	private MyTextField field;	
	public Main(){
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(400,300);
		this.setLayout(null);
		//生成一个自定义的TextField
		field = new MyTextField(3);
		field.setLocation(10, 10);
		field.setEditable(true);
		field.setSize(100, 30);
		this.add(field);
	}
}
我已经知道问题出在哪里了(果然还是基础知识还不够扎实,编码量太少……囧o(╯□╰)o) 非常感谢你百忙之中抽空解答我的疑问。
三仙半 2015-03-26
  • 打赏
  • 举报
回复
你的思路有问题。要清楚,你应该自定义一个类,这个类继承自TextField,有一些你需要的限制,也就是说,这个类自身就是一个TextField。而不是你调用这个类去生成了一个TextField。 你要的限制功能是什么我不知道,不过,基本思路就是,如果输入不符合要求,就调用KeyEvent的consume()方法。 下面是我写的一个基本的框架。

import java.awt.TextField;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class MyTextField extends TextField implements KeyListener {
	private int maxlength;
	public MyTextField(int maxlength) {
		this.maxlength = maxlength;
		this.addKeyListener(this);
	}
	@Override
	public void keyTyped(KeyEvent e) {
		//这里根据限制要求做判断
		if(this.getText().length() == this.maxlength){
			//这里应该停止KeyEvent事件的分发,TextField中的内容不再变化	
			e.consume();
		}
	}
	@Override
	public void keyPressed(KeyEvent e) {
	}
	@Override
	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub

	}
}
下面是测试类。

import javax.swing.JFrame;
public class Main extends JFrame {
	public static void main(String[] args) {
		new Main().setVisible(true);
	}	

	private MyTextField field;	
	public Main(){
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(400,300);
		this.setLayout(null);
		//生成一个自定义的TextField
		field = new MyTextField(3);
		field.setLocation(10, 10);
		field.setEditable(true);
		field.setSize(100, 30);
		this.add(field);
	}
}

58,454

社区成员

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

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