我在寻找为JTextField
编写监听器的解决方案时遇到了麻烦,特别是只允许整数值(允许String
)。我在Document Listener上尝试了this recommended link,但我不知道要调用哪种方法等。
我以前从未使用过这种类型的监听器,所以有人可以解释我如何在JTextField
上编写一个监听器,只允许可以接受的整数值吗?
基本上,在我单击JButton
之后,在将数据提取到变量之前,Listener将不允许在输入整数之前对其进行处理。
非常感谢。
答案 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上编写一个侦听器,只允许可以接受的整数值?
答案 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
适用于限制输入。除了将输入限制为数字之外,它还能够更高级地使用,例如,电话号码格式。这提供了即时验证,无需等待表单提交或类似事件。