您要问的实际上是违反直觉的,并且违背了键绑定API的设计。
目的是为每个按键提供单个工作单元。在我看来,这建议您应为每个箭头键分别执行 *** 作。
它使您更容易遵循逻辑,进行更改,根据需要规避 *** 作。
但是我是谁呢?
如果看不到它,一种简单的方法就是为每个动作分配一个“命令”,然后在
actionPerformed触发该动作时可以进行询问。
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!"); } }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)