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

时间:2010-11-27 02:00:03

标签: java event-handling applet keyevent

我正在编写一个applet,想要弄清楚如何制作一个按钮和一个关键事件覆盖相同的代码。对于这个问题,我会调用此按钮fireButton。动作事件的代码当然如下所示:

public void actionPerformed(ActionEvent e) {
   if (e.getSource() == fireButton) {
      //all the code that pressing button executes
   }  
}

现在,我想按下'enter'键来执行动作事件处理的相同代码,但我不想再用keyPressed方法重写所有代码。

具体来说,我正在编写战舰程序,“Fire”按钮从两个textField获取输入,处理异常,并将输入作为参数传递给在网格中的特定方块触发的方法。理想情况下,按下回车键的功能与按下开火按钮的方式相同。有没有办法让某个方法调用actionPerformed方法?如果没有,那么问题的优雅解决方案是什么?

3 个答案:

答案 0 :(得分:1)

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

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
}  

如果您不需要事件中的任何数据,则更容易;) 这样,您只需为两个事件编写一次代码。这是一般的OO方法 希望这会有所帮助。

答案 1 :(得分:1)

  1. 制作动作
  2. 将动作添加到JButton
  3. 使用键绑定将Enter键绑定到Action
  4. 阅读Swing tutorial。有以下部分:

    1. 如何使用行动
    2. 如何使用键绑定
    3. 如果您只是在谈论调用" Fire"使用回车键的按钮然后查看Enter Key and Button几种方法。

答案 2 :(得分:0)

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

像这样:

public class BattleShipController {

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

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

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

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