Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ActionEvent的来源(键盘与鼠标)_Java_Swing_Jbutton_Actionevent - Fatal编程技术网

Java ActionEvent的来源(键盘与鼠标)

Java ActionEvent的来源(键盘与鼠标),java,swing,jbutton,actionevent,Java,Swing,Jbutton,Actionevent,我有一个连续的动作,我可以通过按下按钮b1来调用它。目前,我在b1中添加了一个MouseListener,如果鼠标事件的来源恰好是b1,我可以通过在MousePressed中调用StartAction和在MouseRelease中调用StopAction来控制此操作的连续性 现在我希望能够通过键盘触发按钮。人们通常会通过ActionListeners这样做。我可以做到: if (source.equals(b1)) { startAction(); stopAction(); } 唯一

我有一个连续的动作,我可以通过按下按钮b1来调用它。目前,我在b1中添加了一个MouseListener,如果鼠标事件的来源恰好是b1,我可以通过在MousePressed中调用StartAction和在MouseRelease中调用StopAction来控制此操作的连续性

现在我希望能够通过键盘触发按钮。人们通常会通过ActionListeners这样做。我可以做到:

 if (source.equals(b1)) {
 startAction();
 stopAction();
 }
唯一的问题是,这种方式鼠标点击会同时触发ActionListener和MouseStener。我想我会尝试将动作侦听器设置为:

 if(source.equals(b1) && !(e instanceof MouseEvent))
 {
 ...
 }
但这给了我:不可转换类型不能将MouseeEvent强制转换为ActionEvent


所以问题是:有没有办法知道一个动作事件是鼠标点击还是键盘触发?我应该使用其他类型的按钮吗?

您可以使用按钮模型的ChangeListener来代替鼠标侦听器。看Mad的答案是的,这听起来正是我想要的。我现在就试试。你想把这个写下来作为答案吗?很有魅力!请随意添加它作为答案。