java - 在运行时清除 jTextField 中键入的字符

标签 java swing awt jtextfield keyevent

private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
int x=evt.getKeyCode();
if(x>=96&&x<=105)
  {
      evt.setKeyCode(8);//Here 8 is used for Backspace key to remove the numeric character entered
  }

Int 这段代码我希望用户不要在 jTextField 中键入任何数值,但如果他这样做,那么我会尝试仅在运行时将其删除......我编写了这段代码,但它没有按照我的预期工作是... 请帮助我!!

最佳答案

您确实应该避免使用KeyListeners,它们对于您最终想要实现的目标来说限制太多,并且当您尝试更改字段文档时,最终只会遇到突变异常该字段正在尝试更改文档。

你真的应该使用 DocumentFilter ,这就是它的设计目的。

((AbstractDocument)field.getDocument()).setDocumentFilter(new DocumentFilter() {

    @Override
    public void insertString(FilterBypass fb, int offset, String text, AttributeSet attr) throws BadLocationException {

        StringBuilder sb = new StringBuilder(64);
        for (char c : text.toCharArray()) {

            if (Character.isDigit(c)) {

                sb.append(c);

            }

        }

        fb.insertString(offset, text, attr);

    }

    @Override
    public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {

        StringBuilder sb = new StringBuilder(64);
        for (char c : text.toCharArray()) {

            if (Character.isDigit(c)) {

                sb.append(c);

            }

        }

        fb.replace(offset, length, sb.toString(), attrs);

    }

});

这是一个非常基本的示例,有很多相关内容。

除了避免突变异常之外,过滤器还会在更新到达文档/字段之前拦截更新,因此传入的更改在屏幕上不可见,您还可以捕获任何粘贴事件或 setText来电。

关于java - 在运行时清除 jTextField 中键入的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12286073/

相关文章:

java - 如何让动画在 JAVA 中通过键盘输入运行?

java - 如何在java中使用JFree图表绘制移动和运行正弦波图表?

java - 绑定(bind)状态的套接字太多

java - 抑制某些文件的特定 checkstyle 规则的正确语法是什么?

java - 如何用泛型参数覆盖具有对象参数的方法?

java - 如何在 JDateChooser 中设置 JCalendar 日期

java - 在 JTextFields 中从法语切换为阿拉伯语

java - 在 JTabbedPane 中拆分标签

java - 如何通过Spring Boot发送400/500/404响应错误

java - 创建巨大的 BufferedImage