Reputation: 14381
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
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
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