mainstringargs
mainstringargs

Reputation: 14381

Elegantly Ignoring Key Presses

I am trying to ignore certain key presses in a JavaTextField. I've added a KeyListener because I need an event fired every time a letter/number/symbol is typed.

I do not want an event fired when any other buttons are pressed. To achieve this I am currently doing this:

        @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
            }

        }

Obviously this is ugly. What is a better way to do this?

Upvotes: 1

Views: 952

Answers (2)

Wug
Wug

Reputation: 13196

You can use a collection of some sort. A set of some sort would probably have the fastest lookups.

// 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

Upvotes: 1

jeff
jeff

Reputation: 4333

one way

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
}

Upvotes: 2

Related Questions