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
}
如果您不需要事件中的任何数据,则更容易;)
这样,两个事件只需编写一次代码。这是一个普遍的问题。希望这有帮助