Java Set Text Field Text As Key Pressed



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

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

我不想要键的实际名称或它的字符。可以说,我想要的是"图片"。就好像我把键输入到我想要显示的文本框中。例如,如果我想将热键设置为波浪('),那么它应该在文本字段中显示为这样。

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

这里有一个简短的代码,让你理解。

我添加了一个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();
        }   
    }

希望对你有帮助!

最新更新