整数的JTextfield监听器

时间:2013-04-01 22:15:18

标签: java swing jtextfield documentlistener

我在寻找为JTextField编写监听器的解决方案时遇到了麻烦,特别是只允许整数值(允许String)。我在Document Listener上尝试了this recommended link,但我不知道要调用哪种方法等。

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

基本上,在我单击JButton之后,在将数据提取到变量之前,Listener将不允许在输入整数之前对其进行处理。

非常感谢。

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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

答案 2 :(得分:1)

  

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

您应该使用JFormattedTextFieldDocument Filter

答案 3 :(得分: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适用于限制输入。除了将输入限制为数字之外,它还能够更高级地使用,例如,电话号码格式。这提供了即时验证,无需等待表单提交或类似事件。