我很难找到一个解决方案来编写一个监听器,JTextField
专门只允许整数值(String
不允许)。我已经在 Document Listener 上尝试过这个推荐的链接,但我不知道调用什么方法等。
我以前从未使用过这种类型的侦听器,所以谁能解释我如何在 a 上编写一个侦听器JTextField
以只允许可以接受的整数值?
基本上在我单击 a 之后JButton
,在将数据提取到变量上之前,Listener 将不允许处理它,直到输入一个整数。
非常感谢。
我很难找到一个解决方案来编写一个监听器,JTextField
专门只允许整数值(String
不允许)。我已经在 Document Listener 上尝试过这个推荐的链接,但我不知道调用什么方法等。
我以前从未使用过这种类型的侦听器,所以谁能解释我如何在 a 上编写一个侦听器JTextField
以只允许可以接受的整数值?
基本上在我单击 a 之后JButton
,在将数据提取到变量上之前,Listener 将不允许处理它,直到输入一个整数。
非常感谢。
您不需要侦听器,您想从 中获取文本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);
您不需要文档侦听器。您希望在提交/确定按钮上有一个 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
我如何在 JTextField 上编写一个侦听器以只允许可以接受的整数值?
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
适用于限制输入。除了将输入限制为数字外,它还具有更高级的用途,例如电话号码格式。这提供了即时验证,而无需等待表单提交或类似事件。