【问题标题】:Limit number input JTextField限制数字输入 JTextField
【发布时间】:2013-04-10 16:12:56
【问题描述】:

我正在开发数独求解器,我正在尝试限制用户可以输入单元格的 数字 数量以及 能够输入数字,目前它也接受字母。目前它的工作方式如下:如果用户输入“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]);
        }
    }
}

如您所见,我目前使用的是number format

【问题讨论】:

标签: java swing limit jtextfield


【解决方案1】:
NumberFormat f = NumberFormat.getInstance();
f.setMaximumIntegerDigits(1);
f.setMinimumIntegerDigits(0);
f.setGroupingUsed(false);

您想使用 MaskFormat 插入:

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

【讨论】:

  • 我试过你提到的,但它给了我一个错误,并告诉我要么添加一个 throw 声明,要么用 try/catch 包围。但是没有让它与那些一起工作。
  • 所以添加一个 try/catch。这是标准的 Java 编程,与此代码无关。你需要知道如何处理异常。您可以随时搜索使用 try/catch 的论坛/wed。
【解决方案2】:

您可以按照以下链接中的说明编写自己的格式化程序:

JTextField limiting character amount input and accepting numeric only

【讨论】:

    最近更新 更多