因此,我试图编写一个JButton,当按下它时,它会像回车键一样。它必须能够欺骗重点在于调用其操作侦听器的JTextField。它不能使用机器人框架,因为这会使每个程序都认为按下Enter键,这是一个问题。
这是背景故事:
我有一个程序(用Swing编写),该程序允许某人在输入数据后通过按Enter来在许多文本字段和其他内容中输入数据。效果很好。
但是,大多数使用它的人会同时使用第二个程序,该程序会自动侦听Enter键并关闭机器人(对于那些熟悉FIRST机器人技术的人,我在谈论SmartDashboard和驱动程序站)。对此有很多抱怨。人们希望在不禁用机器人的情况下输入数据。事实证明,SmartDashboard(人们想要点击进入的程序)允许与它一起运行自定义挥杆组件。
最佳答案
不确定我是否正确理解了您的要求(如果不正确,将其删除)...
您可以手动将事件调度到要处理的任何组件。在要分派给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。