java如何缩短此KeyListener代码
我用这段代码来检测用户何时按下程序中的箭头键。我需要哪个箭头键被按下发送到一个方法,它将处理它,并做它需要做的事情。这是可行的,但问题是我的代码太长而且重复,我相信有办法缩短它。我可以传递整数0-3而不是字符串,如果这样做更容易的话。这是我现在的代码:
getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0), "left");
getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0), "right");
getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), "up");
getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), "down");
getRootPane().getActionMap().put("left", new AbstractAction(){
public void actionPerformed(ActionEvent e)
{
close("left");
}
});
getRootPane().getActionMap().put("right", new AbstractAction(){
public void actionPerformed(ActionEvent e)
{
close("right");
}
});
getRootPane().getActionMap().put("up", new AbstractAction(){
public void actionPerformed(ActionEvent e)
{
close("up");
}
});
getRootPane().getActionMap().put("down", new AbstractAction(){
public void actionPerformed(ActionEvent e)
{
close("down");
}
});
# 1 楼答案
创建一个内部类,该类扩展AbstractAction并可以获取字符串参数
像这样的
然后:
# 2 楼答案
将通用功能抽象为一种方法:
然后你可以做: