【发布时间】:2018-01-06 14:24:00
【问题描述】:
我正在创建一个自定义文本字段类,其中我有一个自定义行为,具体取决于用户是否在其上键入数字键。
!event.getCode().isDigitKey() 总是返回 true,即使我输入数字也是如此。我试图检查 KeyCode 是否也是一个字母,但它仍然返回 false。这里似乎有什么问题?
在检查 事件的 KeyCode 与任何 其他 KeyCode 时,我总是得到错误,即使它们应该相等。
public class ScoreField extends TextField implements Customizable {
public ScoreField() {
super();
customize();
}
@Override
public void customize() {
this.setOnKeyTyped(new EventHandler<KeyEvent>() {
int curChar = 0;
@Override
public void handle(KeyEvent event) {
event.consume();
KeyCode keyTyped = event.getCode();
char charTyped = event.getCharacter().charAt(0);
System.out.println(charTyped);
// Do nothing if not a digit
if (!event.getCode().isDigitKey()) {
System.out.println("NOT A DIGIT KEY");
if (keyTyped == KeyCode.BACK_SPACE) {
System.out.println("RESETTING");
resetText();
return;
}
return;
}
if (getText().length() >= 5) {
if (curChar == 2) {
curChar = 3;
}
if (curChar == 5) {
curChar = 0;
}
StringBuilder builder = new StringBuilder(getText());
builder.setCharAt(curChar, charTyped);
setText(builder.toString());
curChar++;
return;
}
if (getText().length() == 2) {
setText(getText() + ":");
}
setText(getText() + charTyped);
}
});
}
private void resetText() {
setText("");
}
}
【问题讨论】:
-
见documentation。对于键类型事件,代码始终为
KeyCode.UNDEFINED。使用getCharacter()并使用字符串方法检查它是否是数字,或者使用按键事件。 -
我可能根本不会为此使用事件处理程序,fwiw,但会使用
TextFormatter代替(我想取决于您的“特殊行为”的确切性质)。跨度> -
我更新了代码以包含该行为。我不认为 TextFormatter 会做我的工作,看看它的文档。
-
我想我现在只需要一个
if (("" + charTyped).matches("[0-9]"))来解决问题,因为键码始终是未定义的。 -
为什么不
if (Character.isDigit(charTyped))?
标签: java javafx javafx-8 javafx-2