1

我很难找到一个解决方案来编写一个监听器,JTextField专门只允许整数值(String不允许)。我已经在 Document Listener 上尝试过这个推荐的链接,但我不知道调用什么方法等。

我以前从未使用过这种类型的侦听器,所以谁能解释我如何在 a 上编写一个侦听器JTextField以只允许可以接受的整数值?

基本上在我单击 a 之后JButton,在将数据提取到变量上之前,Listener 将不允许处理它,直到输入一个整数。

非常感谢。

4

4 回答 4

2

您不需要侦听器,您想从 中获取文本JTextField并测试它是否为int.

if (!input.getText().trim().equals(""))
{
    try 
    {
        Integer.parseInt(myString);
        System.out.println("An integer"):
    }
    catch (NumberFormatException) 
    {
        // Not an integer, print to console:
        System.out.println("This is not an integer, please only input an integer.");
        // If you want a pop-up instead:
        JOptionPane.showMessageDialog(frame, "Invalid input. Enter an integer.", "Error", JOptionPane.ERROR_MESSAGE);
    }
}

您也可以使用正则表达式(有点矫枉过正,但它有效):

boolean isInteger = Pattern.matches("^\d*$", myString);
于 2013-04-01T22:23:51.117 回答
1

您不需要文档侦听器。您希望在提交/确定按钮上有一个 ActionListener。

确保使用 JTextField 的句柄创建侦听器,然后将此代码放入actionPerformed调用中:

int numberInField;
try {
  numberInField = Integer.parseInt(myTextField.getText());
} catch (NumberFormatException ex) {
  //maybe display an error message;
  JOptionPane.showMessageDialog(null, "Bad Input", "Field 'whatever' requires an integer value", JOptionPane.ERROR_MESSAGE);
  return;
}
// you have a proper integer, insert code for what you want to do with it here
于 2013-04-01T22:22:25.870 回答
1

我如何在 JTextField 上编写一个侦听器以只允许可以接受的整数值?

您应该使用JFormattedTextFieldDocument Filter

于 2013-04-02T01:06:07.647 回答
1

JFormattedTextField 示例:

public static void main(String[] args) {
    NumberFormat format = NumberFormat.getInstance();
    format.setGroupingUsed(false);
    NumberFormatter formatter = new NumberFormatter(format);
    formatter.setValueClass(Integer.class);
    formatter.setMinimum(0);
    formatter.setMaximum(Integer.MAX_VALUE);
    JFormattedTextField field = new JFormattedTextField(formatter);
    JOptionPane.showMessageDialog(null, field);
}

JFormattedTextField适用于限制输入。除了将输入限制为数字外,它还具有更高级的用途,例如电话号码格式。这提供了即时验证,而无需等待表单提交或类似事件。

于 2013-04-26T04:33:34.457 回答