【发布时间】:2021-09-17 00:07:16
【问题描述】:
这不是针对特定关键事件的问题。我以 KeyEvents/KeyListeners 和 JButton 为例。我想要的只是能够方便地在 JUnit 测试中触发侦听器。
我试图在单元测试中触发一个关键的侦听器,但由于某种原因该侦听器没有被触发。
public class Example {
public static void main(String[] args) {
AtomicBoolean keyReleasedRan = new AtomicBoolean(false);
JButton button = new JButton();
button.addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
keyReleasedRan.set(true);
}
});
int modifiers = 100; //Something, we don't care
int keyCode = KeyEvent.VK_A; //something realistic
KeyEvent event = new KeyEvent(button, KeyEvent.KEY_RELEASED, System.currentTimeMillis() + 200,
modifiers, keyCode, 'a');
button.dispatchEvent(event);
System.out.println("KEY RELEASED RAN: " + keyReleasedRan.get());
}
}
我已经在事件构造函数中尝试了多个参数,以防它起作用,但监听器仍然没有被触发。
唯一可行但我真的不想遵循的方法是遍历 KeyListener(s) 并为每个侦听器调用 keyReleased() 方法。
知道我做错了什么吗?
我尝试了其他组件而不是 JButton,但结果相同。
【问题讨论】:
-
1) 对于 Swing,我们通常使用 key bindings 而不是较低级别的
KeyListener。 2)为了尽快获得更好的帮助,edit添加minimal reproducible example或Short, Self Contained, Correct Example。 -
@AndrewThompson 不,不。这与具体的关键事件无关。这是关于任何类型的事件。我想通过 JUnit 测试来触发听众。我知道键绑定。 KeyEvent/KeyListener 只是一个例子。关于 SSCCE,我补充说。我认为 JUnit 测试用例也被认为是某种最小示例,但无论如何。
-
如果您将按钮放在 JFrame 中,请激活 JFrame 并调用按钮上的事件
-
@Ofek 激活框架表示
frame.setVisible(true)? -
试试 button.doClick(0);
标签: java swing awt keylistener