我已经限制用户在jTextField
中输入字符,但是不允许输入小数。
char price = evt.getKeyChar();
if (!Character.isDigit(price)
|| (price == KeyEvent.VK_BACKSPACE)
|| (price == KeyEvent.VK_DELETE)) {
evt.consume();
}
将此代码添加到jTextFieldKyeTyped()
事件后,它的确让我仅输入了数字,但没有输入小数。
如何摆脱它?
答案 0 :(得分:1)
尝试使用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);
}
}
答案 1 :(得分:0)
这应该有效:
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();
}
答案 2 :(得分:0)
如果要将字段限制为数值,请考虑使用JSpinner
类而不是JTextField
。您可以这样配置它:
JSpinner spinner = new JSpinner(new SpinnerNumberModel(0, 0, 1000, 0.01));
(在此示例中,最小值= 0,最大值= 1000,步长= 0.01)