0

我正在尝试使用子类 ColorAction 扩展 AbstractAction 类。此类处理 ActionPerformed 方法,方法是采用字符串格式的用户输入,并将其与 中的 Color 值、字符串键和颜色对象colorKeyHashMap匹配。如果没有找到具有指定键的 Color 对象,则会抛出异常。

对于我的生活,我无法弄清楚如何做到这一点。也许我的游戏关了?我是否应该接受应该是颜色名称的字符串输入,并检查指定的字符串是否与颜色对象之一匹配?我应该使 ActionEvent 等于用户输入颜色吗?我有很多想法在我的脑海中飞驰而过,没有确定的赢家。

public class ColorAction extends AbstractAction{
    Map<String, Color> colorMap;
    private String input;

    public ColorAction(String in) {
        input = in;
        colorMap = new HashMap<>(); //how can i enter a value that is a full range of colors?
    }

    @Override
    public void actionPerformed(ActionEvent e){
        if(colorMap.containsKey(input){
            //...
        }    
    }
}
4

1 回答 1

1

如果我正确理解您的目标,colorMap是您预定义的独立地图,因此应该是静态的。

这是填充静态地图的一种可能方式:

private static final Map<String, Color> colorMap = createColorMap();

private static Map<String, Color> createColorMap() {
    Map<String, Color> colorMap = new HashMap<>();

    //Fill colorMap

    return colorMap;
}

此外,您通常可以通过调用e.getActionCommand()actionPerformed方法来获取用户输入。我不明白为什么要将用户输入传递给ColorAction' 的构造函数。

@Override
public void actionPerformed(ActionEvent e){
    //Assumes the map doesn't have any keys containing upper case letters.
    //By calling toLowerCase, if the user inputs "Red", it would still match
    //the key "red".
    String input = e.getActionCommand().toLowerCase();

    if(colorMap.containsKey(input){
        //...
    }    
}

也就是说,您可能根本不需要构造函数。

于 2013-05-22T20:46:15.217 回答