我现在需要在用户输入4个数字的时候,就需要做一个判断。主要在keytype中实现。限制为数字可以实现。现在的问题就是,如果在keytype中判断jtextfield.gettext().lenght()==3,那么只能显示前面输入的三个数字,无法显示第四输入的数字,后面的方法就触发了。请问我该怎么实现当用户输入4个数字后,就会自动触发一个事件。
解决方案 »
- JAVA 关于子父窗体的问题 JDesktopPane里弹出子窗体JInternalFrame,但是要求不能弹出重复的子窗体
- 麻烦帮忙,关于thinking in java 4th source code
- 一个最简单的服务器与客户机的乱码问题
- 我没分了,麻烦前辈做一下做下作业题,谢谢了
- java与exe文件
- 在applet在另一台计算机上的浏览器中运行时不能与在本机运行的java应用程序建立socket通信,为什么??
- 请问用java做的工具条,是怎样使界面呈现花纹的??
- 求教编译时的错误!!!
- 调试问题:import debug.*;
- 请教高手:JAVA安全方面的问题
- private的用法,封装的概念
- 从oracle中取出空值数据,在Java中该如何处理啊,等待大侠!
package tkl.client.guiutil;import java.awt.Toolkit;import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;import tkl.client.util.TKLCommonUtil;
public class MaskInputDocument extends PlainDocument
{
public static final int SHORT_LENGTH = 10;
public static final int MID_LENGTH = 20;
public static final int LONG_LENGTH = 40;
public static final int TEXT_MASK = 0;
public static final int DIGIT_MASK = 1;
public static final int DECIMAL_MASK = 2;
public static final int PHONE_MASK = 3;
private int length;
private int mask; public MaskInputDocument()
{
super();
this.length = MID_LENGTH;
this.mask = TEXT_MASK;
} public MaskInputDocument(int mask, int length)
{
super();
this.mask = mask;
this.length = length;
} public void insertString(int offs, String input, AttributeSet a)
throws BadLocationException
{
int len = getLength();
if (len >= this.length)
{
Toolkit.getDefaultToolkit().beep();
return;
}
String str = TKLCommonUtil.ToDBC(input);
char[] se = str.toCharArray();
char[] buf = new char[se.length];
int count = 0; for (int i = 0; i < se.length; ++i)
{
if (len + count >= this.length)
{
Toolkit.getDefaultToolkit().beep();
return;
}
char chr = se[i];
if (this.mask == PHONE_MASK)
{
if (Character.isDigit(chr))
{
buf[(count++)] = chr;
}
else if ((chr == '-') && (getText(0, len).indexOf("-") == -1)
&& ((i + offs) != 0))
{
buf[(count++)] = chr;
}
else
{
Toolkit.getDefaultToolkit().beep();
}
}
else if (this.mask == DIGIT_MASK)
{
if (Character.isDigit(chr))
{
buf[(count++)] = chr;
}
else
{
Toolkit.getDefaultToolkit().beep();
}
}
else if (this.mask == DECIMAL_MASK)
{
if (Character.isDigit(chr))
{
buf[(count++)] = chr;
}
else if ((chr == '.') && (getText(0, len).indexOf(".") == -1)
&& ((i + offs) != 0))
{
buf[(count++)] = chr;
}
else
{
Toolkit.getDefaultToolkit().beep();
}
}
else
{
buf[(count++)] = chr;
}
}
if (count > 0)
{
str = new String(buf);
super.insertString(offs, str, a);
}
}}fldUser = new JTextField();
fldUser.setDocument(new MaskInputDocument(MaskInputDocument.TEXT_MASK,
MaskInputDocument.LONG_LENGTH));
比如这样:
jtextfield.getDocument().addDocumentListener(new DocumentListener(){
public void changedUpdate(DocumentEvent e) {} public void insertUpdate(DocumentEvent e) {
if (fldMin.getText().length() == 4) {
System.out.println("4");
}
} public void removeUpdate(DocumentEvent e) {}
});
这个里面需要注意的是在insertUpdate事件处理的过程中,
如果你企图改变jtextfield的本身的一些相关属性最好用SwingUtilities.invokeLater
否则,很难保证你的代码可以正确的执行
public void changedUpdate(DocumentEvent e) {} public void insertUpdate(DocumentEvent e) {
if (jtextfield.getText().length() == 4) {
System.out.println("4");
}
} public void removeUpdate(DocumentEvent e) {}
});刚才有点笔误
txtMsg = new JTextField();
this.add(txtMsg);
txtMsg.setText(mess);
txtMsg.setBounds(0, 0, 100, 28);
txtMsg.requestFocus();
txtMsg.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
e.consume();
sureActionPerformed();
return;
}
}
public void keyTyped(KeyEvent e) {
char c = e.getKeyChar();
if (c > '9' || c < '0') {
e.consume();
return;
}
// if (txtMsg.getText().length() > 3) {
// e.consume();
// //sureActionPerformed();
// return;
// }
}
});
txtMsg.getDocument().addDocumentListener(new DocumentListener(){ public void changedUpdate(DocumentEvent e) {
// TODO 自动生成方法存根
} public void insertUpdate(DocumentEvent e) {
// TODO 自动生成方法存根
if (txtMsg.getText().length() == 4) {
System.out.println(txtMsg.getText());
Thread thread=new Thread();
try {
thread.sleep(500);
} catch (InterruptedException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
sureActionPerformed();
return;
}
} public void removeUpdate(DocumentEvent e) {
// TODO 自动生成方法存根
}
});
}以上是我的主要代码块