我正在编写一个applet,想要弄清楚如何制作一个按钮和一个关键事件覆盖相同的代码。对于这个问题,我会调用此按钮fireButton
。动作事件的代码当然如下所示:
public void actionPerformed(ActionEvent e) {
if (e.getSource() == fireButton) {
//all the code that pressing button executes
}
}
现在,我想按下'enter'键来执行动作事件处理的相同代码,但我不想再用keyPressed
方法重写所有代码。
具体来说,我正在编写战舰程序,“Fire”按钮从两个textField获取输入,处理异常,并将输入作为参数传递给在网格中的特定方块触发的方法。理想情况下,按下回车键的功能与按下开火按钮的方式相同。有没有办法让某个方法调用actionPerformed
方法?如果没有,那么问题的优雅解决方案是什么?
答案 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)
阅读Swing tutorial。有以下部分:
如果您只是在谈论调用" 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();
如果您发布相关代码,我可以提出进一步的建议。