限制 JTextField 输入数字的数量。

5
我正在开发数独求解器,并尝试限制用户在单个单元格中输入数字的数量,同时仅允许输入数字,目前它还接受字母。目前它的工作方式是这样的:如果用户输入“11125455876”,它将只使用最后一个数字(在此例中为“6”)。我想限制用户在单个单元格中输入数字的数量为1,并且仅接受数字1-9。我不太确定如何做到这一点。因此,也许它会覆盖以前的数字,如果我按“a”之类的字母键,则不应发生任何事情。
以下是我的代码:
public PanelGUI(int size) {

    super(size);
    NumberFormat f = NumberFormat.getInstance();
    f.setMaximumIntegerDigits(1);
    f.setMinimumIntegerDigits(0);
    f.setGroupingUsed(false);
    cells = new JTextField[size][size];
    panel.setLayout(new GridLayout(size, size));
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            cells[i][j] = new JFormattedTextField(f);
            cells[i][j].setEditable(true);
            cells[i][j].setFont(boldFont);
            cells[i][j].setBorder(BorderFactory.createMatteBorder(1, 1, 1,
                    1, Color.white));
            cells[i][j].setHorizontalAlignment(JTextField.CENTER);
            panel.add(cells[i][j]);
        }
    }
}

如您所见,我目前正在使用数字格式


1
使用DocumentFilter来限制输入。 - Extreme Coders
@极限编程员 您能否写一篇关于在我的情况下它应该看起来像什么的答案?我对此并不太熟悉。需要改变什么? - Rob
https://dev59.com/GXA75IYBdhLWcg3wAUJ9 - herinkc
请点击 ***此链接***。 - Extreme Coders
2个回答

3
NumberFormat f = NumberFormat.getInstance();
f.setMaximumIntegerDigits(1);
f.setMinimumIntegerDigits(0);
f.setGroupingUsed(false);

您应该使用MaskFormat:

MaskFormatter f = new MaskFormatter( "#" );
f.setValidCharacters("123456789");

我尝试了你提到的方法,但是它给了我一个错误提示,告诉我要么添加一个throw声明,要么用try/catch包围。不过,我用这些方法都没能让它正常工作。 - Rob
1
所以加上一个try/catch。这是标准的Java编程,与此代码无关。你需要知道如何处理异常。你可以随时在论坛/网站上搜索使用try/catch的示例。 - camickr

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接