【问题标题】:How to remove the last character in a JTextField when delete key is pressed按下删除键时如何删除JTextField中的最后一个字符
【发布时间】:2010-11-27 17:54:09
【问题描述】:

我想使用一个按键监听器来检测用户每次在字段中输入文本时的情况。每次触发按键事件我都想获取JTextField中文字的length()。如果length >= limit 那么我想禁用编辑。但是,如果按下 delete 键,我想删除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】:

    尝试将整个事件处理程序包装在 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() 方法检索所有输入的文本。

    【讨论】:

    • 绝招!我过去曾遇到过此类事件的问题,这是迄今为止最好的解决方法。嘿,erietha,你应该考虑接受他的帖子作为解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多