ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 在Swing中模拟输入键(不使用Robot)

2019-06-09 23:51:51  阅读:122  来源: 互联网

标签:java swing keyboard-events


所以我正在尝试编写一个JButton,按下时它将像一个回车键.它必须能够欺骗一个焦点的JTextField来调用它的动作监听器.它不能使用机器人框架,因为这将使每个程序认为输入被按下,这是一个问题.

这是背景故事:

我有一个程序(用Swing编写),允许有人在输入数据后点击输入,在许多文本字段和其他东西中输入数据.它很棒.

但是,大多数使用它的人正在同时使用第二个程序,它会自动侦听输入键并关闭机器人(对于那些熟悉FIRST机器人的人,我说的是SmartDashboard和Driver站).对此有不少抱怨.人们希望在不禁用机器人的情况下输入数据.事实证明,SmartDashboard(人们想要点击的程序)允许自定义挥杆组件随之运行.

解决方法:

不完全确定我是否正确理解你的要求(如果没有,将删除)…

您可以手动将事件分派给要解决的任何组件.在想要派遣到focusOwner的情况下

>通过查询KeyboardFocusManager找到focusOwner
>使用focusOwner作为发件人创建一个keyEvent
>将该事件发送到focusOwner

就像是:

Action action = new AbstractAction("fake enter") {

    @Override
    public void actionPerformed(ActionEvent e) {
        KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
        Component comp = manager.getFocusOwner();
        KeyEvent event = new KeyEvent(comp, 
                KeyEvent.KEY_PRESSED, System.currentTimeMillis(), 0, 
                KeyEvent.VK_ENTER, KeyEvent.CHAR_UNDEFINED);
        comp.dispatchKeyEvent(event);
    }
};
JButton button = new JButton(action);
button.setFocusable(false);

Action textAction = new AbstractAction("text") {

    @Override
    public void actionPerformed(ActionEvent e) {
        LOG.info("I'm the text action" + ((Component) e.getSource()).getName());
    }
};

JComponent comp = Box.createVerticalBox();
for (int i = 0; i < 5; i++) {
    JTextField field = new JTextField(20);
    field.setName(": " + i);
    field.setAction(textAction);
    comp.add(field);
}
comp.add(button);

编辑

添加了一些实际玩它的行(@Joe评论说它不起作用).单击该按钮会触发焦点textField的操作(此处只是打印出字段的名称)本地上下文是vista和jdk6u27.

标签:java,swing,keyboard-events
来源: https://codeday.me/bug/20190609/1208112.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有