我正在创建一个自定义文本字段类,其中我有自定义行为,具体取决于用户是否在其上键入数字键。
!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("");
}
}
答案 0 :(得分:1)
正如James_D所说:
对于键入事件,代码始终为KeyCode.UNDEFINED
所以我按照他的建议做了,而不是检查KeyCode,如果它是一个数字,我在1ST if语句中使用event.getCharacter()[0]
检查Character.isDigit(char)
,它对我的情况完全有效。
P.S:我尝试将TextFormatter与StringConverter一起使用,但我无法使其工作。