[英]About Key Bindings in Java
這里的人們不斷建議我在Java 2D游戲中使用“鍵綁定”,而不是“鍵偵聽器”。
所以我學會了它,我想知道我是否正確地理解了如何使用它。
假設我有一個游戲,有兩個游戲,每個玩家可以按5個按鈕。
玩家1:
玩家2:
如果我希望程序對每個不同的按鍵做出不同的反應,那么我要做的是:(?)
這個對嗎? 僅為按鈕創建10個新類真的合乎邏輯嗎? 我想知道我是否正確理解如何使用鍵綁定,所以我可以開始使用它進行編程。
謝謝
“這是正確的嗎?只為按鈕創建10個新類真的合乎邏輯嗎?”
答案是肯定的。 您確實需要創建10個不同的實例。 不難 您可以創建一個助手類,也可以復制和粘貼類似的內容
Action leftAction = new AbstractAction(){
public void actionPerformed(ActionEvent e){
// do something when left button pressed;
}
};
InputMap inputMap = panel.getInputMap(JPanel.WHEN_IN_FOCUSED_WINDOW);
ActionMap actionMap = panel.getActionMap();
inputMap.put(KeyStroke.getKeyStroke("LEFT"), "leftAction");
actionMap.put("leftAction", leftAction); <----
對於每個不同的動作,只需復制並粘貼Action
代碼,更改變量以及要執行的動作,然后分別輸入到InputMap
和ActionMap
。
我針對不同的情況使用兩種方法。 對於圖形,我更喜歡上面的方式。 對於菜單之類的東西,我傾向於使用單獨的類
看這個例子
public TestKeyBindings02() {
JPanel panel = new JPanel();
InputMap im = panel.getInputMap(JPanel.WHEN_IN_FOCUSED_WINDOW);
ActionMap am = panel.getActionMap();
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0), "RightArrow");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0), "LeftArrow");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), "UpArrow");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), "DownArrow");
am.put("RightArrow", new ArrowAction("RightArrow"));
am.put("LeftArrow", new ArrowAction("LeftArrow"));
am.put("UpArrow", new ArrowAction("UpArrow"));
am.put("DownArrow", new ArrowAction("DownArrow"));
}
public class ArrowAction extends AbstractAction {
private String cmd;
public ArrowAction(String cmd) {
this.cmd = cmd;
}
@Override
public void actionPerformed(ActionEvent e) {
if (cmd.equalsIgnoreCase("LeftArrow")) {
System.out.println("The left arrow was pressed!");
} else if (cmd.equalsIgnoreCase("RightArrow")) {
System.out.println("The right arrow was pressed!");
} else if (cmd.equalsIgnoreCase("UpArrow")) {
System.out.println("The up arrow was pressed!");
} else if (cmd.equalsIgnoreCase("DownArrow")) {
System.out.println("The down arrow was pressed!");
}
}
}
從這里取
個性而言,當我使用keyBindings時,我將創建一個內部類,為每個操作擴展abstractAction,然后創建該內部類的實例,並將其綁定到諸如put("left", ActionLeft);
類的鍵上put("left", ActionLeft);
, 例如。 因此,基本上,我完成了您描述的兩個步驟,並且都成功了。
您也可以只創建匿名類的實例,然后以相同的方式綁定這些實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.