Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为国际键盘定义可读快捷键?_Java_Swing_Keyboard_Keyboard Shortcuts - Fatal编程技术网

Java 如何为国际键盘定义可读快捷键?

Java 如何为国际键盘定义可读快捷键?,java,swing,keyboard,keyboard-shortcuts,Java,Swing,Keyboard,Keyboard Shortcuts,我想我可以使用键盘键的字符串表示来配置快捷键,即让某人在资源包中定义一个击键,并将该值直接传递给javax.swing.keystroke.getKeyStroke(string)。但这不适用于国际键盘,例如阿拉伯语。在那里,键盘键只是高级按键类型的事件,但快捷键需要定义为具有按键代码表示的低级按键按下事件。如果一个人知道相应的钥匙代码,那么他可以使用该钥匙的英文表示来让它工作,但是他应该从哪里知道这一点呢?我编写了一个键侦听器,它告诉我这一点,但在以编程方式解析字符串时,我需要一些东西。有没有

我想我可以使用键盘键的字符串表示来配置快捷键,即让某人在资源包中定义一个击键,并将该值直接传递给
javax.swing.keystroke.getKeyStroke(string)
。但这不适用于国际键盘,例如阿拉伯语。在那里,键盘键只是高级按键类型的事件,但快捷键需要定义为具有按键代码表示的低级按键按下事件。如果一个人知道相应的钥匙代码,那么他可以使用该钥匙的英文表示来让它工作,但是他应该从哪里知道这一点呢?我编写了一个键侦听器,它告诉我这一点,但在以编程方式解析
字符串时,我需要一些东西。有没有想过在快捷方式中使用依赖于自然语言的键表示法

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.AbstractAction;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;


public class InternationalKeyStroke {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                JFrame frame = new JFrame();
                frame.setPreferredSize(new Dimension(600, 400));
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                JPanel panel = new JPanel();
                final JLabel label = new JLabel("Type the key you want to know the key code of!");
                panel.add(label);
                frame.addKeyListener(new KeyAdapter() {

                    @Override
                    public void keyPressed(KeyEvent e) {
                        String text = "Key " + e.getKeyChar() + " needs to be configured with char ='" + (char) e.getKeyCode() + "'";
                        label.setText(text);
                        System.out.println(text);
                    }

                });
                frame.getContentPane().add(panel);
                frame.pack();
                frame.setVisible(true);

                KeyStroke working = KeyStroke.getKeyStroke("control typed A");
                label.registerKeyboardAction(new AbstractAction() {

                    @Override
                    public void actionPerformed(ActionEvent event) {
                        System.out.println("Working action " + event);
                    }
                }, working, JComponent.WHEN_IN_FOCUSED_WINDOW);

                KeyStroke target = KeyStroke.getKeyStroke("control typed ش");
                System.out.println(target);
                label.registerKeyboardAction(new AbstractAction() {

                    @Override
                    public void actionPerformed(ActionEvent event) {
                        System.out.println("Not working Action " + event);
                    }
                }, target, JComponent.WHEN_IN_FOCUSED_WINDOW);
            }
        });
    }
}

这似乎是不可能的。我检查了Microsoft Office和Eclipse,它们都没有使用当前区域设置的真正unicode字母,但相应的虚拟密钥代码的字母…

不相关:registerKeyboardAction是非常过时的api,从jdk 1.3开始,它就被inputMap/actionMap取代。不过,可能也是同样的问题;-)