在运行时在jTextField中清除键入的字符 private void jTextField1KeyPressed(java.awt.event.KeyEvent evt){ int x=evt.getKeyCode(); 如果(x>=96&&x

在运行时在jTextField中清除键入的字符 private void jTextField1KeyPressed(java.awt.event.KeyEvent evt){ int x=evt.getKeyCode(); 如果(x>=96&&x,java,swing,awt,jtextfield,keyevent,Java,Swing,Awt,Jtextfield,Keyevent,你真的应该避免keylisters,那么它们对于你最终想要实现的目标来说太有限了,当你试图在字段试图更改文档的同时更改字段文档时,你只会得到一个变异异常 你真的应该使用a,这就是它的设计目的 private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) { int x=evt.getKeyCode(); if(x>=96&&x<=105) { evt.setKeyCode(8);//He

你真的应该避免
keylisters
,那么它们对于你最终想要实现的目标来说太有限了,当你试图在字段试图更改文档的同时更改字段文档时,你只会得到一个变异异常

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

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
  }
这是一个非常基本的例子,有很多这样的例子


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

虽然这可能不是最好的方法,但这里有一个非常简单的方法

您可以像这样覆盖
JTextField
paintComponent()
方法:

((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);

    }

});

不要用两种不同的方式问同一个问题;将此问题与第一个问题合并。可能的重复。亲爱的loed no,NEVER,NEVER,NEVER,NEVER,change,在任何绘制方法中更改UI组件,您都将通过重复的重新绘制请求消耗te CPU
JTextField textField = new JTextField(text) {

@Override
protected void paintComponent(Graphics grphcs) {
    super.paintComponent(grphcs);
    String newStr = "";
    for (char c : getText().toCharArray()) {
        if (!Character.isDigit(c)) {
            newStr += c;
        }
    }
    setText(newStr);

    }
};