无法在 jTextField 中输入小数,因为限制输入字符
Unable to enter decimal in jTextField cause of restricted to enter character
我已限制用户在 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
class 而不是 JTextField
。您可以这样配置它:
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);
}
}
我已限制用户在 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
class 而不是 JTextField
。您可以这样配置它:
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);
}
}