我希望我的 jtextfield 只接受 0 和下面代码示例中指定的 MAX
值之间的数值。
假设 MAX
变量设置为 8,如下所示。然后我只希望可以输入 0 到 8 之间的数值。在我下面的代码示例中,您可以键入 88、77、66 等,但这是不可能的。我不知道该怎么做,所以它只接受 0 到 MAX
之间的值。
import javax.swing.*;
import javax.swing.text.*;
public class DocumentDemo extends JFrame {
public static void main(String[] args) {
new DocumentDemo();
}
final int MAX = 8;
public DocumentDemo() {
this.setVisible(true);
JTextField textField = new JTextField();
((AbstractDocument)textField.getDocument()).setDocumentFilter(
new DocumentFilter() {
@Override
public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
int len = text.length();
boolean isValidValue = true;
for(int i = 0; i < len; i++) {
if(!Character.isDigit(text.charAt(i))){
isValidValue = false;
}
}
if(isValidValue && Integer.parseInt(text) > MAX) {
isValidValue = false;
}
if(isValidValue && fb.getDocument().getText(0, fb.getDocument().getLength()).length() > String.valueOf(MAX).length()) {
isValidValue = false;
}
if(isValidValue) {
super.replace(fb, offset, length, text, attrs);
}
}
}
);
textField.setColumns(5);
this.add(textField);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.pack();
}
}
最佳答案
JFormattedTextField听起来像你想要的。
NumberFormatter nf = new NumberFormatter();
nf.setMinimum(new Integer(0));
nf.setMaximum(new Integer(8));
JFormattedTextField field = new JFormattedTextField(nf);
编辑:展示了如何设置最小值、最大值
关于java - 如何在 JTextfied 中只接受 0 到 8 之间的数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24375071/