java - 如何拥有正确的 java 键绑定代码?
问题描述
我正在开发一个小游戏并使用键绑定。在我的游戏中,我有一个主 JPanel,其中包含我想要的所有绑定,因为所有键都应该随时可用。在阅读了一些示例后,我有这个工作代码:
KeyStroke endTurnKey = KeyStroke.getKeyStroke("F2");
mainPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(endTurnKey, "endTurnAction");
mainPanel.getActionMap().put("endTurnAction", new EndTurn(this));
for (int i = 0; i < 6; i++) {
KeyStroke selectSpell = KeyStroke.getKeyStroke(49 + i, 0);
mainPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(selectSpell, "selectSpell" + i);
mainPanel.getActionMap().put("selectSpell" + i, new SelectSpell(this, i));
}
我的 SelectSpell 课程是:
public class SelectSpell extends AbstractAction {
private static final long serialVersionUID = 1L;
private World w;
private int spellIndex;
public SelectSpell(World w, int spellIndex) {
this.w = w;
this.spellIndex = spellIndex;
}
@Override
public void actionPerformed(ActionEvent arg0) {
// Whatever depending on spellIndex
}
}
我想要的是一个类或我可以命名为“绑定”的东西,并带有连续的“此键执行此操作,此操作执行此操作,......”以便轻松更改它们,添加新的......我也找到了我的AbstractAction 继承的类有点......在某些方面是错误的,使用局部变量来指定在 actionPerformed 中做什么是正常的吗?另一个问题是我必须为每种类型的动作创建一个新类,这正常吗?
解决方案
推荐阅读
- python - 如何从熊猫 groupby 系列创建熊猫数据框?
- sql - 如何解决解析:Dax 查询中的无效令牌错误
- ios - iOS CoreStore:在 transaction.deleteAll 之后不会触发 ListObjectObserver 回调
- javascript - 基本的 JavaScript/JQuery 函数无缘无故无法工作
- php - 将带有 AJAX 帖子的变量 JavaScript 传递到 PHP 文件,没有任何反应,但控制台日志中没有错误
- excel - 对不同的工作表重复操作
- c - 父子终止后继续输出,无法执行操作
- apache-flink - Flink 可查询状态内存不足错误
- amazon-web-services - 列出 api-gateway 关系时出错:请求过多
- python - 如何根据现有日期计算django中的到期日期