【发布时间】:2012-10-16 01:09:44
【问题描述】:
我正在尝试限制用户可以在文本字段中输入的字符的最大长度,但它似乎不起作用。
代码如下:
text2 = new JTextField("Enter text here",8);
我做错了什么吗?如何使限制正常工作?
【问题讨论】:
标签: java swing user-interface document jtextfield
我正在尝试限制用户可以在文本字段中输入的字符的最大长度,但它似乎不起作用。
代码如下:
text2 = new JTextField("Enter text here",8);
我做错了什么吗?如何使限制正常工作?
【问题讨论】:
标签: java swing user-interface document jtextfield
无需使用任何API
只需在TextFieldKeyTyped事件上写下这段代码
if (jTextField.getText().trim().length() == 8 || evt.getKeyChar() == java.awt.event.KeyEvent.VK_BACK_SPACE) {
evt.consume();
}
在使用此代码集之前,JTextField 属性 setTransferHandler(null); 将阻止粘贴。
【讨论】:
只需扩展 JTextField 类并覆盖构造函数中的 KeyReleased 事件并将其指向一个检查长度的新方法:
package gui;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JTextField;
public class RecordClassTextField extends JTextField {
public RecordClassTextField() {
this.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
cleanText();
}
});
}
private void cleanText()
{
if(this.getText().length() > 17){
System.out.println("Over 17");
}
}
}
【讨论】:
您当前的代码没有设置最大长度,而是定义了可见列的数量。
要限制数据的最大长度,您可以为文本字段设置自定义Document,不允许添加违反最大长度限制的内容:
public final class LengthRestrictedDocument extends PlainDocument {
private final int limit;
public LengthRestrictedDocument(int limit) {
this.limit = limit;
}
@Override
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
if (str == null)
return;
if ((getLength() + str.length()) <= limit) {
super.insertString(offs, str, a);
}
}
}
然后将您的文本字段设置为使用此文档:
text2.setDocument(new LengthRestrictedDocument(8));
【讨论】:
【讨论】: