Отключение нажатия клавиши пробела для JButton - PullRequest
7 голосов
/ 17 декабря 2010

JButtons считают нажатие клавиши пробела таким же, как нажатие на JButton (при условии, что JButton имеет фокус, который я предполагаю здесь). Есть ли способ отключить это поведение, чтобы они игнорировали нажатие клавиши пробела?

Также, в более общем смысле, существует ли метод для этого с AbstractButtons?

Ответы [ 2 ]

3 голосов
/ 17 декабря 2010

Ссылка, предоставленная aioobe, показывает, как это сделать для отдельной кнопки. Если вы хотите сделать это для всех JButton, вы должны сделать:

InputMap im = (InputMap)UIManager.get("Button.focusInputMap");
im.put(KeyStroke.getKeyStroke("pressed SPACE"), "none");
im.put(KeyStroke.getKeyStroke("released SPACE"), "none");

Если вы хотите сделать это для флажков и переключателей, вам нужно будет повторить вышеописанное для каждой карты ввода.

Возможно, вы захотите прочитать Введите ключ и кнопку . Это на самом деле противоположно тому, что вы хотите, так как объясняет, как вызывать кнопку при использовании клавиши Enter. Но это может помочь объяснить, почему это решение работает наоборот.

1 голос
/ 17 декабря 2010

Вы можете отключить его, выполнив

jbutton.getInputMap().put(KeyStroke.getKeyStroke("SPACE"), "none");

Похоже, что это работает и для других AbstractButton с, таких как JRadioButton с.

Когда @ camickr указывает на ниже , вы можете решить его за все JButton s за один раз:

InputMap im = (InputMap)UIManager.get("Button.focusInputMap");
im.put(KeyStroke.getKeyStroke("pressed SPACE"), "none");
im.put(KeyStroke.getKeyStroke("released SPACE"), "none");
...