按下删除键时如何删除JTextField中的最后一个字符

问题描述 投票:1回答:1

我希望每次用户在字段中输入文本时都使用密钥监听器进行检测。每次触发键事件时,我想获得length()中文本的JTextField。如果length >= limit然后我想禁用编辑。但是,如果按下删除键,我想删除JTextFieldsetEditable(true)中的最后一个字符。

如何删除JTextField中的最后一个字符?

public void keyPressed (KeyEvent evt) {}
public void keyReleased (KeyEvent evt) {

    int limit = 1;
    JTextField text = (JTextField)evt.getSource();

    if (text.getText().length() >= limit) { 
        text.setEditable(false); 
    }
    else {
        if (evt.getKeyCode() == KeyEvent.VK_BACK_SPACE) {   
            answer ="";
            text.setEditable(true);
        }           

public void keyTyped (KeyEvent evt) {}

}

jtextfield keylistener keyevent
1个回答
1
投票

尝试将整个事件处理程序包装在SwingUtilities.invokeLater块中。

public void keyReleased(KeyEvent evt)  
    { 
        final int limit = 1;
        final int keyCode = evt.getKeyCode();
        final JTextField text = (JTextField)evt.getSource();

        SwingUtilities.invokeLater(new Runnable(){

            public void run() {
                if (text.getText().length() >= limit) 
                { 
                    text.setEditable(false); 
                } 
                else if(keyCode == KeyEvent.VK_BACK_SPACE) 
                {       
                    answer =""; 
                    text.setEditable(true); 
                }
            }
        });                        
    } 

由于事件处理和Swing GUI更新都是在Event Dispatch Thread上完成的,因此可能需要这样才能允许text.getText()方法检索所有输入的文本。

© www.soinside.com 2019 - 2024. All rights reserved.