Java JTextField只接受数字和一个点
我希望我的文本字段只接受数字(数字)和一个点,因为它是一个用户可以在其中写入产品价格的字段。我有这个代码,但它不能很好地工作,它只接受数字和删除Java JTextField只接受数字和一个点,java,swing,jtextfield,Java,Swing,Jtextfield,我希望我的文本字段只接受数字(数字)和一个点,因为它是一个用户可以在其中写入产品价格的字段。我有这个代码,但它不能很好地工作,它只接受数字和删除 char c=evt.getKeyChar(); if(!(Character.isDigit(c))||(c==KeyEvent.VK_BACK_SPACE)||(c==KeyEvent.VK_DELETE)){ getToolkit().beep(); evt.consume(); } 有人能帮我修一下吗?不要用键盘监听器。这是使
char c=evt.getKeyChar();
if(!(Character.isDigit(c))||(c==KeyEvent.VK_BACK_SPACE)||(c==KeyEvent.VK_DELETE)){
getToolkit().beep();
evt.consume();
}
有人能帮我修一下吗?不要用键盘监听器。这是使用AWT时的旧代码 Swing有更新更好的API 最简单的方法是使用
JFormattedTextField
。有关更多信息和工作示例,请阅读上Swing教程的部分
另一个选项是使用
DocumentFilter
。阅读上Swing教程中的部分。不要使用KeyListener。这是使用AWT时的旧代码
Swing有更新更好的API
最简单的方法是使用JFormattedTextField
。有关更多信息和工作示例,请阅读上Swing教程的部分
另一个选项是使用
DocumentFilter
。阅读上Swing教程的部分。我找到了解决此问题的方法:
这是我写的代码
char c=evt.getKeyChar();
if((Character.isDigit(c))| |(c==KeyEvent.VK_PERIOD)| |(c==KeyEvent.VK_BACK_SPACE)){
int punto=0;
如果(c==KeyEvent.VK_PERIOD){
字符串s=pricefield.getText();
int dot=s.indexOf('.');
punto=点;
如果(点!=-1){
getToolkit().beep();
evt.consume();
}
}
}
否则{
getToolkit().beep();
evt.consume();
}
我找到了这个问题的解决方案:
这是我写的代码
char c=evt.getKeyChar();
if((Character.isDigit(c))| |(c==KeyEvent.VK_PERIOD)| |(c==KeyEvent.VK_BACK_SPACE)){
int punto=0;
如果(c==KeyEvent.VK_PERIOD){
字符串s=pricefield.getText();
int dot=s.indexOf('.');
punto=点;
如果(点!=-1){
getToolkit().beep();
evt.consume();
}
}
}
否则{
getToolkit().beep();
evt.consume();
}
私有void textFieldKeyTyped(java.awt.event.KeyEvent evt){
获取keyTyped并将其传递给validate方法
Char或keytyped不是有效的输入,因此请将其使用
这限制了小数点的输入,只能输入一个小数点
获取文本字段中输入的整个字符串
获取点的索引(.or十进制/句点)。
如果字符串没有任何点或小数点,indexOf()方法将返回-1
每次按键,都会调用此方法
这将确定字符是否具有整数、小数点、退格或删除的匹配值。如果字符是整数、小数点、删除或退格,则返回true,否则返回false。
但是,它不限制可以输入多少小数点
这里是整个代码,我已经提供了一些评论,希望这些会有所帮助
私有void textFieldKeyTyped(java.awt.event.KeyEvent evt){ 获取keyTyped并将其传递给validate方法 Char或keytyped不是有效的输入,因此请将其使用 这限制了小数点的输入,只能输入一个小数点 获取文本字段中输入的整个字符串 获取点的索引(.or十进制/句点)。 如果字符串没有任何点或小数点,indexOf()方法将返回-1 每次按键,都会调用此方法 这将确定字符是否具有整数、小数点、退格或删除的匹配值。如果字符是整数、小数点、删除或退格,则返回true,否则返回false。 但是,它不限制可以输入多少小数点 这里是整个代码,我已经提供了一些评论,希望这些会有所帮助
看到这一点,它可能会帮助“一个用户在其中写产品价格的文件。”
new JSpinner(新SpinnerNumberModel(0.0,0.0,999.99.01));
看到这一点,它可能会帮助“一个用户在其中写产品价格的文件。”new JSpinner(新SpinnerNumberModel(0.0,0.0,999.99.01))
谢谢,非常有帮助。但是现在我不得不使用jtextfield,因为我已经创建了一个小程序,在其中添加了很多内容jtextfield@Dani,1)JFormattedTextField是JTextField。2)可以在JTextField上使用DocumentFilter。3)您当前的设计与此无关。它不起作用,因此您仍然需要进行更改。请妥善处理不要走捷径。正如你所看到的,当你用错误的方式做事时,你会遇到问题。谢谢,非常有帮助。但是现在我必须使用jtextfield,因为我已经创建了一个小程序,在其中添加了很多jtextfield@Dani,1)JFormattedTextField是JTextField。2)可以在JTextField上使用DocumentFilter。3)您当前的设计与此无关。它不起作用,因此您无论如何都需要进行更改。正确地做事,不要走捷径。因为您可以看到,当您以错误的方式做事时,您会遇到问题。您是否可以为此代码添加一些解释?仅答案;进入关于改进答案的详细信息。您是否可以为此代码添加一些解释?仅答案;进入详细信息关于改进答案。
if(!validate(evt.getKeyChar())){
evt.consume();
}
if(evt.getKeyChar()==KeyEvent.VK_DECIMAL || evt.getKeyChar()==KeyEvent.VK_PERIOD){
String field = textField.getText();
int index = field.indexOf(".");
if(!(index==-1)){ //index is not equal to -1
evt.consume(); //consume
}
}
}
private boolean validate(char ch){
if(!(Character.isDigit(ch)
|| ch==KeyEvent.VK_BACKSPACE
|| ch==KeyEvent.VK_DELETE
|| ch==KeyEvent.VK_DECIMAL
|| ch==KeyEvent.VK_PERIOD)){
return false;
}
return true;
}
private void textFieldKeyTyped(java.awt.event.KeyEvent evt) {
if(!validate(evt.getKeyChar())){ //get char or keytyped
evt.consume();
}
//limit one dot or decimal point can be entered
if(evt.getKeyChar()==KeyEvent.VK_DECIMAL || evt.getKeyChar()==KeyEvent.VK_PERIOD){
String field = textField.getText(); //get the string in textField
int index = field.indexOf("."); //find the index of dot(.) or decimal point
if(!(index==-1)){ //if there is any
evt.consume(); //consume the keytyped. this prevents the keytyped from appearing on the textfield;
}
}
}
//determine if keytyped is a valid input
private boolean validate(char ch){
if(!(Character.isDigit(ch)
|| ch==KeyEvent.VK_BACKSPACE
|| ch==KeyEvent.VK_DELETE
|| ch==KeyEvent.VK_DECIMAL
|| ch==KeyEvent.VK_PERIOD
)){
return false; //return false, because char is invalid
}
return true; // return true, when the if statement above does not meet its conditions
}