java - 如何在 JTextfied 中只接受 0 到 8 之间的数值?

标签 java swing numbers jtextfield documentfilter

我希望我的 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/

相关文章:

java - 无法从客户端应用程序调用 GWT-RPC

java - 选择组合框中的项目时执行操作

Java Swing JButton getResource 不能正常工作

javascript - jquery 两个数字输入,如果另一个输入发生更改,则自动重新计算每个输入

javascript - 最小/最大的 "min"部分不起作用 - javascript

java - 使用 `new` 实例化泛型时,是否包含类型参数之间有什么实际区别?

java - HashSet 构造函数中的通配符泛型

java - TextField.setText() 返回一个奇怪的错误

java - spring数据选top 100

java - JFrame : cannot display two panels in jframe