【问题标题】:Java Set Text Field Text As Key PressedJava将文本字段文本设置为按键
【发布时间】:2015-08-04 16:06:38
【问题描述】:

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

我目前有以下函数,它接受一个键作为热键,然后应该将热键文本字段的文本设置为按下的键。

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

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

提前致谢。

【问题讨论】:

  • 如果我理解正确,您正在寻找一种方法来捕获键入的键并将其写入 TextField ?例如,如果我在键盘上键入“f”,“f”应该显示在 TextField 中?
  • 没错!知道怎么做吗?

标签: java swing input keyboard


【解决方案1】:

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

我添加了一个KeyListener(在本例中为KeyAdapter,它不是一个接口,而是做同样的事情)来监听键盘上的每个按键事件。 然后,您只需添加在 TextField 中键入的键即可。

请记住,KeyListener 仅在具有 listener 和 focus 的所有组件中侦听。这意味着您需要向所有组件添加相同的侦听器,当它们具有焦点时,您希望这样做。

在示例中,只有具有侦听器的标签。如果你点击 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();
        }   
    }

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多