Java设置文本字段文本作为键按下

时间:2015-05-22 14:58:39

标签: java swing input keyboard

我正在使用自动点击器,用户可以在其中设置自定义热键。

我目前有以下功能,它接受一个被指定为热键的键,然后应该将热键文本字段的文本设置为被按下的键。

我不想要密钥的实际名称或字符。我想要它的'图片'可以这么说。好像我实际上在文本字段中键入了键,我想要显示该字符。因此,例如,如果我想将hotkety设置为波浪号(`),那么它应该在文本字段中显示为。

KeyboardFocusManager.getCurrentKeyboardFocusManager()
                        .addKeyEventDispatcher(new KeyEventDispatcher() {
                            @Override
                            public boolean dispatchKeyEvent(KeyEvent e) {
                                int keycode = e.getKeyCode();
                                hotkeyField.setText("");
                                KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(this);
                                return false;
                            }
                        });

提前致谢。

1 个答案:

答案 0 :(得分:1)

这是一个简短的代码,让您了解。

我添加了一个KeyListener(在这种情况下是一个KeyAdapter,它不是一个界面,但做同样的事情)来监听你键盘上的每个关键事件。 然后,您只需添加在TextField中键入的键。

请注意,KeyListener仅在所有具有侦听器焦点的组件中进行侦听。这意味着您需要为所有组件添加相同的侦听器,以便在有焦点时执行此操作。

在例子中,只有标签有听众。如果你点击JButton,那么什么都不会发生。

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

    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;

    public class FieldListener{

        public FieldListener(){
            this.initGUI();
        }

        private void initGUI(){

            //Create a frame with a JLabel and a JTextField
            JFrame frame = new JFrame();
            JPanel panel = new JPanel();
            JTextField field = new JTextField();
            field.setPreferredSize(new Dimension(80,30));
            JLabel label = new JLabel("Shortcut :");
            label.setFocusable(true); //Label must be focusable

            panel.add(label);
            panel.add(field);

            frame.add(panel);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack();
            frame.setVisible(true);

            label.requestFocus(); //Set focus on the JLabel to unfocus the JTextField

            //Listen every key event on the label
            label.addKeyListener(new KeyAdapter() {
                @Override
                public void keyPressed(KeyEvent e){
                    //Set the text with the key typed
                    field.setText(KeyEvent.getKeyText(e.getKeyCode())); 
                }
            });
        }

        public static void main(String[] args) {
            new FieldListener();
        }   
    }

我希望它能帮到你!