我正在尝试使用子类ColorAction扩展AbstractAction类。此类通过以字符串格式获取用户的输入并将其与colorKey
中的Color值匹配来处理ActionPerformed方法, HashMap String 键和颜色对象。如果找不到具有指定键的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){
//...
}
}
}
答案 0 :(得分: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){
//...
}
}
那就是说,你可能根本不需要构造函数。