1

JavaTextFieldでの特定のキー押下を無視しようとしています。文字/数字/記号を入力するたびに発生するイベントが必要なため、KeyListenerを追加しました。

他のボタンが押されたときにイベントが発生することは望ましくありません。これを達成するために、私は現在これを行っています:

        @Override
        public void keyPressed(KeyEvent arg0) {
            // System.out.println(arg0);
            if (arg0.getKeyCode() != (KeyEvent.VK_ENTER)
                    && arg0.getKeyCode() != (KeyEvent.VK_BACK_SPACE)
                    && arg0.getKeyCode() != (KeyEvent.VK_DELETE)
                    && arg0.getKeyCode() != (KeyEvent.VK_UP)
                    && arg0.getKeyCode() != (KeyEvent.VK_DOWN)
                    && arg0.getKeyCode() != (KeyEvent.VK_LEFT)
                    && arg0.getKeyCode() != (KeyEvent.VK_RIGHT)
                    && arg0.getKeyCode() != (KeyEvent.VK_SHIFT)
                    && arg0.getKeyCode() != (KeyEvent.VK_CAPS_LOCK)
                    && arg0.getKeyCode() != (KeyEvent.VK_PAGE_DOWN)
                    && arg0.getKeyCode() != (KeyEvent.VK_PAGE_UP)
                    && arg0.getKeyCode() != (KeyEvent.VK_SCROLL_LOCK)
                    && arg0.getKeyCode() != (KeyEvent.VK_NUM_LOCK)
                    && arg0.getKeyCode() != (KeyEvent.VK_ESCAPE)) {
                // fire event here
            }

        }

明らかにこれは醜いです。これを行うためのより良い方法は何ですか?

4

2 に答える 2

2

一方通行

private static final List<Integer> ACCEPTED_KEYS = Arrays.asList(KeyEvent.VK_ENTER, ...);

public void keyPressed(KeyEvent event) {
  if (ACCEPTED_KEYS.contains(event.getKeyCode())
    // do something
}
于 2012-08-13T18:10:01.903 に答える
1

ある種のコレクションを使用できます。ある種のセットは、おそらくルックアップが最も高速です。

// new class member
Set<Integer> ignoredKeyCodes = new HashSet<Integer>();

// add to class constructor
ignoredKeyCodes.add(KeyEvent.VK_ENTER);
// add other key codes

// check with
if (!ignoredKeyCodes.contains(arg0.getKeyCode())) // fire event here
于 2012-08-13T18:11:56.787 に答える