将 JTextField 输入限制为整数
将 JTextField 输入限制为仅接受正整数的任务是经常遇到的需求,但要实现此限制可能会带来挑战。正如最初尝试的那样,为此目的使用 KeyListener 有几个缺点。
使用 KeyListener 的缺点:
解决方案: DocumentFilter
更好的方法是使用 DocumentFilter。此 Swing 组件允许您过滤文本组件的内容,从而精确控制可以输入的内容。
工作原理:
DocumentFilter 允许您检查文本组件内容的任何传入更改。通过检查修改后的字符串是否代表有效整数,您可以接受或拒绝更改。
示例实现:
以下代码片段演示了如何实现将输入限制为整数的 DocumentFilter:
import javax.swing.text.DocumentFilter; import javax.swing.text.BadLocationException; public class MyIntFilter extends DocumentFilter { @Override public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException { Document doc = fb.getDocument(); StringBuilder sb = new StringBuilder(); sb.append(doc.getText(0, doc.getLength())); sb.insert(offset, string); if (test(sb.toString())) { super.insertString(fb, offset, string, attr); } else { // Handle invalid input, e.g., display an error message } } private boolean test(String text) { try { Integer.parseInt(text); return true; } catch (NumberFormatException e) { return false; } } }
通过将此 DocumentFilter 附加到您的 JTextField,您可以确保仅有效允许输入整数。
以上是如何限制 JTextField 仅接受正整数?的详细内容。更多信息请关注PHP中文网其他相关文章!