gpt4 book ai didi

java - 如何制作只接受代号一中数字的 TextField?

转载 作者:行者123 更新时间:2023-11-30 10:17:45 25 4
gpt4 key购买 nike

因为 Codename One API 类似于 AWT/Swing。我想获得与以下代码相同的结果,但使用代号一:

    private void jTextField1KeyTyped(java.awt.event.KeyEvent evt) {

char c = evt.getKeyChar();

if(!(Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) ||
c == KeyEvent.VK_DELETE)) {

getToolkit().beep();
evt.consume();
}
}

这实际上是一个 TextField,它通过限制输入类型只接受数字。如何在代号一中制作类似的东西?

OBS:我只想限制数字的输入类型。

到目前为止我的代码:

public void keyPressed(final TextField current) {

current.addDataChangedListener((i, ii) -> {
if(isValidInput(current.getText())) {
current.putClientProperty("LastValid", current.getText());
} else {
current.stopEditing();
current.setText((String)current.getClientProperty("LastValid"));
current.startEditingAsync();
}
});
}

public boolean isValidInput(String input){

if(input.contains("a") || input.contains("b") || input.contains("c")
|| input.contains("d") || input.contains("e") || input.contains("f")
|| input.contains("g") || input.contains("h") || input.contains("i")
|| input.contains("j") || input.contains("k") || input.contains("l")
|| input.contains("m") || input.contains("n") || input.contains("o")
|| input.contains("p") || input.contains("q") || input.contains("r")
|| input.contains("s") || input.contains("t") || input.contains("u")
|| input.contains("v") || input.contains("w") || input.contains("x")
|| input.contains("y") || input.contains("z")) {
return false;
}
else {
return true;
}
}

我的 isValidInput() 方法似乎太长了,不是吗?有帮助吗?

最佳答案

如评论中所述,这应该与 addDataChangedListener() 一起使用。请注意,这不会产生理想的用户体验,因为虚拟键盘可以有多种实现,并且它们不能通过按键事件工作,因为没有按键......

像这样应该没问题:

myTextField.addDataChangedListener((i, ii) -> {
if(isValidInput(myTextField.getText())) {
lastValidInput = myTextField.getText();
} else {
myTextField.stopEditing();
myTextField.setText(lastValidInput);
myTextField.startEditingAsync();
}
});

现在这可能会在没有开始/停止编辑的情况下工作,这会导致虚拟键盘“弹跳”,但我不会冒险...

如果您想编写 100% 通用代码,您需要在类中定义一个字符串字段 lastValidInput 或用客户端属性替换该代码:

myTextField.addDataChangedListener((i, ii) -> {
if(isValidInput(myTextField.getText())) {
myTextField.putClientProperty("LastValid", myTextField.getText());
} else {
myTextField.stopEditing();
myTextField.setText((String)myTextField.getClientProperty("LastValid"));
myTextField.startEditingAsync();
}
});

isValidInput(String) 方法如果是您的验证方法,您可以在那里运行任何文本以确保文本符合您的需要,无论是数字还是其他内容。

关于java - 如何制作只接受代号一中数字的 TextField?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49596546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com