Java 在JTextField中设置可输入字符
有没有办法设置哪些键将字符放入JTextFieldJava 在JTextField中设置可输入字符,java,swing,jtextfield,documentlistener,documentfilter,Java,Swing,Jtextfield,Documentlistener,Documentfilter,有没有办法设置哪些键将字符放入JTextField 例如,如果我只想输入数字,当按下字母键时,该字母将不会添加到JTextField中的现有文本中。通过在JTextField中设置只在其中插入数字值的自定义文档 如Oracle文档中关于JTextField的说明所示: public class UpperCaseField extends JTextField { public UpperCaseField(int cols) { super(cols); } protect
例如,如果我只想输入数字,当按下字母键时,该字母将不会添加到JTextField中的现有文本中。通过在JTextField中设置只在其中插入数字值的自定义文档 如Oracle文档中关于JTextField的说明所示:
public class UpperCaseField extends JTextField {
public UpperCaseField(int cols) {
super(cols);
}
protected Document createDefaultModel() {
return new UpperCaseDocument();
}
static class UpperCaseDocument extends PlainDocument {
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
if (str == null) {
return;
}
char[] upper = str.toCharArray();
for (int i = 0; i < upper.length; i++) {
upper[i] = Character.toUpperCase(upper[i]);
}
super.insertString(offs, new String(upper), a);
}
}
公共类UpperCaseField扩展了JTextField{
公共大写字段(整数列){
超级(cols);
}
受保护的文档createDefaultModel(){
返回新的大写文档();
}
静态类UpperCaseDocument扩展了PlainDocument{
公共void insertString(int offs、String str、AttributeSet a)
抛出BadLocationException{
如果(str==null){
返回;
}
char[]upper=str.toCharArray();
对于(int i=0;i
}
阅读更多信息:您可以使用KeyAdapter并使用您不喜欢的密钥。请查看此答案,关于@user2097804,这可能有效,但不再是推荐的方法。API中的示例代码很旧。Swing的新版本不支持更好的方法。查看注释,您可以使用格式化文本字段或DocumentFilter。不要使用KeyListener。