gpt4 book ai didi

java - 在Swing中模拟回车键(不使用Robot)

转载 作者:搜寻专家 更新时间:2023-11-01 01:46:11 27 4
gpt4 key购买 nike

所以我正在尝试编写一个 JButton,它在按下时将充当回车键。它必须能够欺骗处于焦点中的 JTextField 以调用其 Action 监听器。它不能使用机器人框架,因为那会使每个程序都认为已按下回车,这是一个问题。

这是背景故事:

我有一个程序(用 Swing 编写),它允许某人在输入数据后按回车键在许多文本字段和其他内容中输入数据。效果很好。

但是,大多数使用它的人同时使用第二个程序,它会自动监听回车键并关闭机器人(对于那些熟悉 FIRST 机器人的人来说,我说的是 SmartDashboard和司机站)。对此有不少提示。人们希望在不禁用机器人的情况下输入数据。事实证明,SmartDashboard(人们想要按下回车键的程序)允许自定义 swing 组件与其一起运行。

最佳答案

不完全确定我是否正确理解您的要求(如果不正确,将删除此内容)...

您可以手动将事件分派(dispatch)到您想要处理的任何组件。在想派发给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 评论说它不起作用)。单击按钮会触发焦点文本字段的操作(这里只是打印出字段的名称)本地上下文是 vista 和 jdk6u27。

关于java - 在Swing中模拟回车键(不使用Robot),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9711976/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com