2014-11-24 2 views
0

Я попытался несколько раз, чтобы найти решение самостоятельно, консультируясь с Google, но этот вопрос, как смехотворно легкий, как кажется, не имеет документального ответа. Мне кажется.java метод нажатия клавиш вызов

Все, что я хочу знать, это: Как вызвать метод из нажатия клавиши? Пример: нажатие ctrl + up -> метод вызова zoomUp();

ps: было бы хорошо, если бы это нажатие клавиши могло быть привязано к JTextPane.

Update

До сих пор мое решение не было:

  • Создать Предмет: JMenuItem up = new JMenuItem("up");

  • Создать ярлык:

up.setAccelerator (KeyStroke.getKeyStroke (java.awt.event.KeyEvent.VK_UP, Toolkit.getDefaultToolkit(). GetMenuShortcutKeyMask()));

  • Поймать событие слушателем:

up.addActionListener (новый java.awt.event.ActionListener() {общественного недействительным actionPerformed (ActionEvent событие) {// Сделайте материал}});

(- никогда не добавляйте Предмет, чтобы он был скрытым ярлыком) Но это, очевидно, нелепо.

+0

Релевантный (?) Учебник по swing: https://docs.oracle.com/javase/tutorial/uiswing/events/keylistener.html – blgt

+0

Используйте keylistener: http://www.java2s.com/Code/JavaAPI/ javax.swing/JTextFieldaddKeyListenerKeyListenerl.htm – 6ton

+0

Хорошо, спасибо за ответ, но я не думаю, что keyListener - правильное решение для меня. Мне не нужно проверять одно нажатие/отключение. Мне нужно нажатие клавиши = ключ с модификатором типа ctrl. – Haeri

ответ

1

Вы не можете использовать JMenuItem для создания «скрытых» сокращений. Короткие срезы JMenuItem с становятся активными после того, как JMenuItem получает косвенно добавляют к Window (обычно через < - JMenu < - JMenuBar < - JFrame). Без этой ссылки не может быть известно, должен ли запускаться ускоритель или нет, поскольку тот же ускоритель может инициировать различные действия в разных окнах приложений.

Вам необходимо использовать KeyListener на компоненте или в кадре, в котором вы хотите реагировать.

+0

Хорошо, спасибо, что поняли это. Как я уже сказал, у меня создалось впечатление, что KeyListener предназначался для типа «игрового» типа, например, в течение некоторого (истинного) цикла. И мне нужно только один раз за всю жизнь увеличить/уменьшить JTextPane. Но хорошо, я снова займусь этим KeyListener. – Haeri