Java 如何使TextField只接受代号为1的数字?
因为代码名One API类似于AWT/Swing。我希望得到与下面代码相同的结果,但使用代号1:Java 如何使TextField只接受代号为1的数字?,java,swing,codenameone,Java,Swing,Codenameone,因为代码名One API类似于AWT/Swing。我希望得到与下面代码相同的结果,但使用代号1: private void jTextField1KeyTyped(java.awt.event.KeyEvent evt) { char c = evt.getKeyChar(); if(!(Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) || c == KeyEvent
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();
}
}
这实际上是一个文本字段,它仅通过限制输入类型来接受数字。如何在代号1中制作类似的东西
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)
方法如果您使用validate方法,您可以在那里运行任何文本,以确保文本符合您的需要,无论是数字还是其他内容 嗯,从Swing的角度来看,这是一种非常非常非常糟糕的方法,使JTextField
只接受数字-尝试将文本粘贴到字段中,看看会发生什么。任何合适的示例都会使用文档过滤器
。这并不能回答你的问题,但希望能让你更多地思考手头的问题。这可能是一个很好的开始——有很多可用的例子。可能也是一本很好的读物。我已经看了这些例子,但这不是我要找的,因为这些都是约束条件。约束并不限制输入类型,它只是提示虚拟键盘类型。我正在寻找这样的东西:我会被诱惑去看你,甚至可以考虑看一看可能会给你一些想法的来源,非常感谢,它工作得很好。我更新了我的问题,我只是担心我的isValidInput()方法。检查它。您的方法将为:A
、&
、א
和几乎所有其他字符返回true。这显然不是正确的方法。。。看见