Java 无法在jTextField中输入小数,因为限制输入字符
我已限制用户在Java 无法在jTextField中输入小数,因为限制输入字符,java,swing,jtextfield,Java,Swing,Jtextfield,我已限制用户在jTextField中输入字符,但不允许输入小数 char price = evt.getKeyChar(); if (!Character.isDigit(price) || (price == KeyEvent.VK_BACKSPACE) || (price == KeyEvent.VK_DELETE)) { evt.consume(); } 将此代码添
jTextField
中输入字符,但不允许输入小数
char price = evt.getKeyChar();
if (!Character.isDigit(price)
|| (price == KeyEvent.VK_BACKSPACE)
|| (price == KeyEvent.VK_DELETE)) {
evt.consume();
}
将此代码添加到jTextFieldKyeTyped()
如何摆脱它?这应该可以:
char price = evt.getKeyChar();
if ((!Character.isDigit(price)
|| (price == KeyEvent.VK_BACK_SPACE)
|| (price == KeyEvent.VK_DELETE))
&& (price!='.')){
evt.consume();
}
if(price=='.'&&textField.getText().contains('.'+"")){
evt.consume();
}
如果您想将字段限制为数值,请考虑使用<代码> JSpinner <代码>类,而不是<代码> JTraceField>代码>。您可以这样配置它:
JSpinner spinner = new JSpinner(new SpinnerNumberModel(0, 0, 1000, 0.01));
(在本例中,最小值=0,最大值=1000,步长=0.01)尝试JFormattedField而不是字符过滤。检查工作代码:
import javax.swing.*;
import javax.swing.text.InternationalFormatter;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
public class Main {
public static void main(String[] args) {
NumberFormat format = DecimalFormat.getInstance();
format.setMinimumFractionDigits(1);
format.setMaximumFractionDigits(5);
format.setRoundingMode(RoundingMode.HALF_UP);
InternationalFormatter formatter = new InternationalFormatter(format);
formatter.setAllowsInvalid(false);
JFormattedTextField field = new JFormattedTextField(formatter);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(field);
frame.setSize(200, 100);
frame.setVisible(true);
}
}
@请再看一遍代码,我已经这样做了。这个代码不起作用。你可能忘记了&&前面的圆括号。它必须是这样的:如果((第一|第二|第三)和&(第四|第五){.在本例中,数字代表条件。此代码确实有效。好的,我会再次检查它。但现在我用jFormattedTextField进行了更改。它也起作用。谢谢。它起作用了。谢谢,所以我是否需要用jFormattedTextField
替换时间选择。查看它们。好的,非常感谢。