当前位置: 首页 > 知识库问答 >
问题:

只接受一个数字

仲和韵
2023-03-14

我正在开发一个数独小程序,我想制作它的单元格(扩展JTextField),以便它只接受0-9和长度为1之间的整数。稍后我会对它进行更多限制(以便它符合游戏规则)。我从:

    public Block(int[] blockNum){
        this.setLayout(new GridLayout(3,3));
        this.setBorder(new LineBorder(Color.BLACK,2)); 
        for(int i=0; i<CELL_COUNT; i++){
            cells[i] = new Cell(); // Cell extends JTextField
            ((AbstractDocument)cells[i].getDocument()).setDocumentFilter(
                    new MyDocumentFilter()); // <- this is relevant for this question

            if(blockNum[i]!=0){
                cells[i].setNumber(blockNum[i]);
                cells[i].setEditable(false);
            }
            this.add(cells[i]);
        }
    }
}

在这里,我试图过滤输入,对于开始,我只是试图将其限制为整数和一个数字,但似乎我可以输入任意多的数字,而最后一行不会被触发。

想在这里得到一些帮助,谢谢:

class MyDocumentFilter extends DocumentFilter
{   
    @Override
    public void replace(DocumentFilter.FilterBypass fp, int offset
                    , int length, String string, AttributeSet aset)
                                        throws BadLocationException
    {
        int len = string.length();
        boolean isValidInteger = true;
        if (len>1 || !Character.isDigit(string.charAt(0))) isValidInteger = false;


        if (isValidInteger)
            super.replace(fp, offset, length, string, aset);
        else
            Toolkit.getDefaultToolkit().beep();
    }
}

共有1个答案

吕骞尧
2023-03-14

尝试使用DocumentFilter类。这将允许您在实际显示之前检查输入。你也可以编辑我下面的内容,只检查整数。

JTextField tf = new JTextField();
AbstractDocument d = (AbstractDocument) tf.getDocument();
d.setDocumentFilter(new DocumentFilter(){
    int max = 1;

    @Override
    public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
        int documentLength = fb.getDocument().getLength(); 
            if (documentLength - length + text.length() <= max)
        super.replace(fb, offset, length, text.toUpperCase(), attrs);
    }
});
 类似资料:
  • 我希望我的文本字段只接受数字(数字)和一个点,因为这是一个用户可以在其中写入产品价格的字段。我有这个代码,但它不能很好地工作,它只接受数字和删除。 有人能帮我修一下吗?

  • 我需要在Android上实现一个,它只接受特定范围的字符,即:“S、A、Q、W、R、B、C、D、E、U”。

  • 我有一个文本字段,我只接受键盘上的数字,但现在我必须更改它,因为它是“价格文本字段”,我还需要接受一个点”。“对于任何价格。 我怎样才能改变这个以得到我需要的?

  • 我是JAVA的新手,文本字段是否可以只接受数字输入?是否也有可能在代码内部有一个等式?例如:(毛额*10) 下面是我希望有数值输入的代码://Display private class Handler implements ActionListener{public void actionPerformed(ActionEvent e){

  • 在学习C# winform中,注意到List<T>的集合,只接受一个泛型。 有没有如其他语言那样,可以实现 List<string,bool>这样的集合的。 注意,不是Dictionary<string,bool>,因为键值对中,要求键 为唯一的。 请大佬指导 同上

  • 我有一个只接受数字的mobileNumber正则表达式“[1-9][0-9]*”<但是我需要在开始时有一个可选的。但用户可能不会在开始时输入 例如9089098909 例如9089098909 例如919089098909 我最多可以接受13个字符<我正在做这个。谁能告诉我怎么解决这个问题吗?