[Java] 利用 getInputMap、getActionMap 和 KeyStroke 從外部新增 Action
承自上一篇 javax 中 KeyListener 的遲鈍問題 解決了聽取按鍵的延遲問題,終於看懂那個 StackOverflow 的解答,試著自己把他做出來,而且更貪心地我想做成一個類別,之後都能用,就像 pygame 裡 sprite 的 update() 一樣。但是 Java 寫起來超級長而且很不自由,非常不滿意,期待之後能改良: 首先這個類別 GameObject 是繼承自 JLabel ,他是 JComponent 的子類別就有 InputMap 和 ActionMap 可以使用鍵盤功能,簡單型式(不考慮聽取鍵盤的延遲問題的話的作法)如下: GameObject.java package game; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.ActionMap; import javax.swing.InputMap; import javax.swing.JLabel; import javax.swing.KeyStroke; public class GameObject extends JLabel implements ActionListener{ Action goLeft; // 宣告一個 Action 準備給按下左鍵時動作,內容在下面重載 public GameObject() { goLeft = new LeftAction(); this.getInputMap().put(KeyStroke.getKeyStroke("pressed LEFT"), "leftAct"); this.getActionMap().put("leftAct", goLeft); // 用 "pressed Left" 字串會得到一個鍵值,並對應到 "leftAct" 字串 // 再用 Action...