1

ユーザーがフィールドにテキストを入力するたびに検出されるキーリスナーを使用したいと考えています。キー イベントがトリガーされるたびに、length()内のテキストのを取得したいと考えていますJTextField。もしそうなら、length >= limit編集を無効にしたい。ただし、削除キーが押された場合は、andの最後の文字を削除したいと思います。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) {}

}

4

1 に答える 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 の更新はどちらもイベント ディスパッチ スレッドで行われるため、text.getText() メソッドが入力されたすべてのテキストを取得できるようにするために、これが必要になる場合があります。

于 2010-05-12T15:34:11.480 に答える