Java обнаруживает комбинацию клавиш CTRL + X на jtree

Мне нужен пример того, как добавить обработчик клавиатуры, который обнаруживает, когда Ctrl + C, Ctrl + X, < kbd> Ctrl + C нажал на JTree.

Раньше я делал это с помощью горячих клавиш меню, но безуспешно.


person ShirazITCo    schedule 11.05.2011    source источник
comment
Хотя эти предложения будут работать, они действительно заслуживают -1. Swing был разработан для использования с привязками клавиш, а не с прослушивателями ключей. См .: download.oracle.com/javase/tutorial/uiswing/misc/…. Решения должны продвигать стандартные концепции дизайна Swing. KeyListeners используется в старых приложениях AWT, которые не поддерживают привязки клавиш.   -  person camickr    schedule 12.05.2011
comment
См. ответ camickr для получения рабочей ссылки на руководство по привязке клавиш.   -  person Josiah Yoder    schedule 02.02.2016


Ответы (5)


Вы можете добавить KeyListeners к любому компоненту (f)

        f.addKeyListener(new KeyListener() {

            @Override
            public void keyTyped(KeyEvent e) {
            }

            @Override
            public void keyPressed(KeyEvent e) {
                if ((e.getKeyCode() == KeyEvent.VK_C) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) {
                    System.out.println("woot!");
                }
            }

            @Override
            public void keyReleased(KeyEvent e) {
            }
        });
person MeBigFatGuy    schedule 11.05.2011
comment
Используйте Toolkit.getMenuShortcutKeyMask () вместо жестко запрограммированного CTRL_MASK. Не все платформы используют Ctrl в качестве модификатора команд. - person John M; 12.05.2011
comment
Привязки клавиш - это подход, используемый всеми компонентами Swing. - person camickr; 12.05.2011
comment
InputEvent.CTRL_MASK устарел, расширенные модификаторы (например, InputEvent.CTRL_DOWN_MASK) рекомендуется использовать сейчас. Раздражает, но факт. docs.oracle.com/javase/ 6 / документы / api / java / awt / событие / - person ericsoco; 11.02.2013
comment
if ((e.getKeyCode() == KeyEvent.VK_C) && ((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)) { System.out.println("woot!"); } } Относится к Alt + CTRL + C = CTRL + C. Предлагаемое решение фактически не может отличаться от каких-либо нескольких модификаторов. Используйте скорее @Override public void keyPressed(KeyEvent e) { if ((e.getKeyCode() == KeyEvent.VK_C) && ((e.getModifiers() | KeyEvent.CTRL_MASK) == KeyEvent.CTRL_MASK)) { System.out.println("woot!"); } } - person Hans; 10.04.2015
comment
По какой-то причине в моем тестировании Ctl-A отображается с KeyCode 0 и KeyChar 1. Точно так же Ctl-N отображается с KeyChar 14. (Номер буквы в алфавите). Не знаю, задокументировано ли это где-нибудь. . - person Josiah Yoder; 02.02.2016
comment
как насчет того, чтобы я нажму CTRL + ALT + A? - person gumuruh; 15.03.2017

Например, используйте KeyListener:

jTree1.addKeyListener(new java.awt.event.KeyAdapter() {

        public void keyPressed(java.awt.event.KeyEvent evt) {
            if (evt.isControlDown() && evt.getKeyCode() == KeyEvent.VK_C) {

                JOptionPane.showMessageDialog(this, "ctrl + c");

            } else if (evt.isControlDown() && evt.getKeyCode() == KeyEvent.VK_X) {

                JOptionPane.showMessageDialog(this, "ctrl + x");

            } else if (evt.isControlDown() && evt.getKeyCode() == KeyEvent.VK_V) {

                JOptionPane.showMessageDialog(this, "ctrl + v");

            }
        }
    });

Надеюсь, это поможет.

person MOHAMED FATHEI    schedule 11.05.2011
comment
Привязка клавиш - это подход, используемый всеми компонентами Swing. - person camickr; 12.05.2011

Используйте привязки клавиш.

person camickr    schedule 11.05.2011

Но обычно это можно сделать с помощью ускорителей меню: myMenuItem.setAccelerator(KeyStroke.getKeyStroke("control C"));

person Joel    schedule 11.05.2011
comment
Системные зарезервированные комбинации клавиш кажутся конфликтующими Accelerator. Я сделал это, но это не сработало. есть шанс добавить обработчик клавиатуры для обнаружения? - person ShirazITCo; 12.05.2011
comment
да, вы можете добавить прослушиватель ключей к элементу управления, реализовать onKeyPress () и проверить модификаторы ключевого события. Я сделал это для обнаружения mousewhell + ctrl, но он должен работать и в вашем случае. - person Joel; 12.05.2011

person    schedule
comment
Вы также должны объяснить, как работает код. - person Rohit Gupta; 13.06.2015