Java 如何使ActionEvent和KeyEvent触发相同的操作?

Java 如何使ActionEvent和KeyEvent触发相同的操作?,java,event-handling,applet,keyevent,Java,Event Handling,Applet,Keyevent,我正在编写一个小程序,想知道如何使按钮和按键事件覆盖相同的代码位。对于这个问题,我将调用这个按钮fireButton。操作事件的代码当然如下所示: public void actionPerformed(ActionEvent e) { if (e.getSource() == fireButton) { //all the code that pressing button executes } } 现在,我想按“回车”键来执行动作事件处理的相同代码,但我不想用k

我正在编写一个小程序,想知道如何使按钮和按键事件覆盖相同的代码位。对于这个问题,我将调用这个按钮
fireButton
。操作事件的代码当然如下所示:

public void actionPerformed(ActionEvent e) {
   if (e.getSource() == fireButton) {
      //all the code that pressing button executes
   }  
}
现在,我想按“回车”键来执行动作事件处理的相同代码,但我不想用
keyPressed
方法再次重写所有代码

具体地说,我正在编写一个战舰程序,“Fire”按钮从两个文本字段中获取输入,处理异常,并将输入作为参数传递给一个方法,该方法在网格中的某个特定正方形处激发。理想情况下,按下enter键的功能与按下fire按钮的功能相同。有没有办法让某个方法调用
actionPerformed
方法?如果没有,什么是解决这个问题的优雅方法?

借用我的经验,我建议您有一个控制器类来处理这类请求。然后,您所要做的就是委托给每个事件处理程序中的控制器

像这样:

public class BattleShipController {

   public void handleFireAction() {
   // ...
   }
}

//-- in your UI class(es)
private BattleShipController _controller = new BattleShipController();

//-- in event calls:
_controller.handleFireAction();

如果您发布相关代码,我可以提出进一步建议。

我建议您将所有代码放在一个单独的方法中,该方法将从事件(如果有)接收所有相关数据作为参数:

public void actionPerformed(ActionEvent e) {
    if (e.getSource() == fireButton) {
        Object relevantData0 = new Object(); // e.getSomething();
        Object relevantData1 = new Object(); // e.getSomethingElse();
        handleFireAction(relevantData1, relevantData2);
    }
}  

public void actionPerformed(KeyEvent e) {
    if (e.getSource() == fireButton) {
        Object relevantData0 = new Object(); // e.getSomething();
        Object relevantData1 = new Object(); // e.getSomethingElse();
        handleFireAction(relevantData1, relevantData2);
    }
}  

private void handleFireAction(Object relevantData0, Object relevantData1) { // Object relevantDat2, and so on
    //all the code that pressing button executes
}  
如果您不需要事件中的任何数据,则更容易;) 这样,两个事件只需编写一次代码。这是一个普遍的问题。
希望这有帮助

  • 创建一个动作
  • 将操作添加到JButton
  • 使用键绑定将Enter键绑定到操作
  • 读这本书。以下章节介绍:

  • 如何使用动作
  • 如何使用密钥绑定
  • 如果您只是在谈论用enter键调用“Fire”按钮,那么请查看一些方法