KeyStroke с клавишами 1-9 не работает с раскладкой JTextComponent.

По какой-то неизвестной причине этот код не работает.

JTextComponent component = new JTextArea();
Keymap keymap = component.getKeymap();
keymap.addActionForKeyStroke(KeyStroke.getKeyStroke(KeyEvent.VK_1, InputEvent.ALT_DOWN_MASK), myAction);

Он никогда не вызывает myAction, когда я нажимаю Alt и 1 (не на цифровой клавиатуре, а 1 над буквами). Это также не работает для любого модификатора.

Приведенное здесь решение https://stackoverflow.com/a/11974908/3838784 не работает, действие по-прежнему не сработал. Удаление всех нажатий клавиш из карты клавиш, у которых в качестве модификатора есть ALT, тоже не помогает.


person Community    schedule 15.06.2016    source источник
comment
Похоже, проблема возникает только с клавишами 1-9 (а не с цифровой клавиатурой).   -  person    schedule 15.06.2016
comment
1-9 ключи? действие срабатывает, когда я нажимаю alt+q   -  person Madhawa Priyashantha    schedule 15.06.2016
comment
@Fast Snail Я знаю, но если вы замените VK_Q на VK_1, это не сработает. РЕДАКТИРОВАТЬ: я отредактировал вопрос.   -  person    schedule 15.06.2016
comment
vk_1 также работает. Показать полный минимальный пример   -  person Madhawa Priyashantha    schedule 15.06.2016
comment
Это очень странно. Я заменил свой код на тот, который я предоставил, и он все еще не работает. Может быть ошибка.   -  person    schedule 15.06.2016
comment
ничего не могу сказать, не видя вашего полного кода   -  person Madhawa Priyashantha    schedule 15.06.2016


Ответы (1)


Я попробовал образец, используя ваш код, он работает нормально. Можете ли вы сообщить мне, если что-то отличается от вашего кода?

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.text.JTextComponent;
import javax.swing.text.Keymap;

public class MyExample extends JFrame {

    MyExample() {
        initGUI();
    } // Constructor

    private void initGUI() {
        // Create the button
        JButton myButton = new JButton("Press ME !");

        // Create the label
        JLabel testLabel = new JLabel("TEST !!!");

        // Set up the window 
        JPanel pane = (JPanel) getContentPane();
        pane.setLayout(new BorderLayout());

        pane.add(myButton, BorderLayout.CENTER);
        pane.add(testLabel, BorderLayout.SOUTH);
        JTextComponent component = new JTextArea();
        pane.add(component, BorderLayout.SOUTH);
        Keymap keymap = component.getKeymap();

        keymap.addActionForKeyStroke(KeyStroke.getKeyStroke(KeyEvent.VK_1, InputEvent.ALT_DOWN_MASK), new MyAction());

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        // setSize(600,300);  

    }

    public static void main(String[] args) {
        try {
            // Set System L&F
            for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (UnsupportedLookAndFeelException e) {
            // handle exception
        } catch (ClassNotFoundException e) {
            // handle exception
        } catch (InstantiationException e) {
            // handle exception
        } catch (IllegalAccessException e) {
            // handle exception
        }
        // new MyExample().setVisible(true);
        EventQueue.invokeLater(() -> {
            MyExample me = new MyExample();
            me.setVisible(true);
        });
    }

    class MyAction extends AbstractAction{

        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("Action performed");
        }

    }
}
person Beniton    schedule 15.06.2016
comment
Ваш образец мне не подходит. Это должно быть ошибка в Ubuntu MATE или что-то в этом роде, и OpenJDK, и Oracle JDK не работают при запуске этого теста... :( - person ; 15.06.2016
comment
да я мог бы быть. Я не использую ubuntu, поэтому я могу проверить. Но это работает в Windows. - person Beniton; 16.06.2016