当前位置: 代码迷 >> Eclipse >> 编纂一个能够创建创建文本框并限制输入内容的类
  详细解决方案

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

热度:46   发布时间:2016-04-23 00:03:00.0
编写一个能够创建创建文本框并限制输入内容的类。
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=======================================
}
});

}
}

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

什么原因,求解。
------解决思路----------------------
你的思路有问题。要清楚,你应该自定义一个类,这个类继承自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);
}
}
  相关解决方案