【问题标题】:How to trigger key press event explicitly on button click java如何在按钮单击java上显式触发按键事件
【发布时间】:2014-09-09 03:41:26
【问题描述】:

是否有任何机制可以在单击按钮时显式触发按键事件。 当我单击 java UI "+" 中命名的按钮时,它将显式触发 "+" 按键事件。

【问题讨论】:

    标签: java events button keyboard key-events


    【解决方案1】:

    您可以通过多种方式实现这一目标,您使用哪种方式取决于您要尝试做什么。

    你可以...

    使用java.awt.Robot,这将允许您在本机事件队列中生成一个关键事件。但请记住,此事件将(最终)被分派到具有当前键盘焦点的组件...

    Robot bot = new Robot();
    bot.setAutoDelay(250);
    bot.keyPress(KeyEvent.SHIFT_KEY);
    bot.keyPress(KeyEvent.EQUALS); // Shift + "=" = +
    bot.keyRelease(KeyEvent.EQUALS);
    bot.keyRelease(KeyEvent.SHIFT_KEY);
    

    你可以...

    手动调度事件。如果您尝试将事件发送到另一个组件(例如字段),您可以手动分派事件

    field.dispatchEvent(new KeyEvent(field, KeyEvent.KEY_PRESSED, System.currentTimeMillis(), KeyEvent.SHIFT_DOWN_MASK, KeyEvent.VK_EQUALS, '+'));
    field.dispatchEvent(new KeyEvent(field, KeyEvent.KEY_TYPED, System.currentTimeMillis(), KeyEvent.SHIFT_DOWN_MASK, KeyEvent.VK_EQUALS, '+'));
    field.dispatchEvent(new KeyEvent(field, KeyEvent.KEY_RELEASED, System.currentTimeMillis(), KeyEvent.SHIFT_DOWN_MASK, KeyEvent.VK_EQUALS, '+'));
    

    例如...

    import java.awt.EventQueue;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    
    public class ButtonTrigger {
    
        public static void main(String[] args) {
            new ButtonTrigger();
        }
    
        public ButtonTrigger() {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    try {
                        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                        ex.printStackTrace();
                    }
    
                    JFrame frame = new JFrame("Testing");
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.add(new TestPane());
                    frame.pack();
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                }
            });
        }
    
        public class TestPane extends JPanel {
    
            private JTextField field;
            private JButton button;
    
            public TestPane() {
                setLayout(new GridBagLayout());
                GridBagConstraints gbc = new GridBagConstraints();
                gbc.gridwidth = GridBagConstraints.REMAINDER;
    
                field = new JTextField(10);
                button = new JButton("+");
    
                add(field, gbc);
                add(button, gbc);
    
                button.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        field.dispatchEvent(new KeyEvent(field, KeyEvent.KEY_PRESSED, System.currentTimeMillis(), KeyEvent.SHIFT_DOWN_MASK, KeyEvent.VK_EQUALS, '+'));
                        field.dispatchEvent(new KeyEvent(field, KeyEvent.KEY_TYPED, System.currentTimeMillis(), KeyEvent.SHIFT_DOWN_MASK, KeyEvent.VK_UNDEFINED, '+'));
                        field.dispatchEvent(new KeyEvent(field, KeyEvent.KEY_RELEASED, System.currentTimeMillis(), KeyEvent.SHIFT_DOWN_MASK, KeyEvent.VK_EQUALS, '+'));
                    }
                });
            }
    
        }
    
    }
    

    【讨论】:

    • jButton1.dispatchEvent(new KeyEvent(jTextField1, KeyEvent.KEY_PRESSED, System.currentTimeMillis(), KeyEvent.SHIFT_DOWN_MASK, KeyEvent.VK_EQUALS, '+'));我添加了这段代码,但它不起作用......我想在单击 jButton1 时在 jTextField1 中添加“+”标记
    • 检查更新,确保将事件发送到字段,而不是按钮
    猜你喜欢
    • 2014-09-21
    • 2013-05-11
    • 1970-01-01
    • 2014-01-25
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多