2

だから私は基本的なスイングアプリケーションを持っていJTextfieldますKeyListener.

public class PromptKeyListener implements KeyListener {

    private boolean SHIFT_PRESSED;

    @Override
    public void keyPressed(KeyEvent e) {

        if (e.getKeyCode() == KeyEvent.VK_ENTER) {
            //Do Thing A
        } else if (e.getKeyCode() == KeyEvent.VK_SHIFT) {
            this.SHIFT_PRESSED = true;
        }

                     if (SHIFT_PRESSED
                && e.getKeyCode() == KeyEvent.VK_BACK_SPACE) {
            //Do Thing B
        }

       }

    @Override
    public void keyReleased(KeyEvent e) {

        if (e.getKeyCode() == KeyEvent.VK_SHIFT) {
            this.SHIFT_PRESSED = false;
        }
        System.out.println(SHIFT_PRESSED);
    }

    @Override
    public void keyTyped(KeyEvent e) {

    }

}

問題は、SHIFT を押したままにし、Backspace B が発生したときに発生しますが、Backspace キーを押すと、通常どおりテキスト ボックスから 1 文字が削除されます。

SHIFT を押したままにすると、Backspace でテキスト ボックスから文字が削除されないようにする方法はありますか?

4

2 に答える 2

3

解決策は機能しますが、間違ったアプローチをとっています(私見)。

KeyBindings APIを利用する必要があります

InputMap im = field.getInputMap(JComponent.WHEN_FOCUSED);
ActionMap am = field.getActionMap();

im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, KeyEvent.SHIFT_DOWN_MASK), "DoThingB");
am.put("DoThingB", new AbstractAction() {

    @Override
    public void actionPerformed(ActionEvent e) {

        System.out.println("Do Think B");

    }
});

また、キーKeyListenerをトラップするために を使用するべきではありません。enterActionListener

于 2012-08-21T00:13:21.307 に答える
2

Swingでのイベントのデフォルト動作の停止を参照してください

その答えはあなたが呼び出すことができるはずだと言っています

e.consume()

テキストがフィールドに入るデフォルトの動作を防ぐため。

于 2012-08-20T20:06:23.660 に答える