这里我有一些代码(缩写为显示最重要的部分)
private Map<String, Color> hashMap = new HashMap<String, Color>();
for (int u = 0; u < people.size(); u++) {
if (people.get(u) instanceof Boy) {
list[u]="B";
hashMap.put(list[u], Color.red);
System.out.print("B");
} else if (people.get(u) instanceof Girl) {
System.out.print("G");
list[e] = "G";
hashMap.put(list[u], Color.green);
}
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.drawString(list, 10, 10)
// I would like to color each value according to its key in the hashMap list looping through my array
}
我希望我的g.drawString()
遍历我的名为list
的数组,其中包含[B,G,G,B,B,B,B,G]
,并根据我的hashMap根据颜色为每个值着色,并返回此数组的颜色。< / p>
所以我的hashMap["G" = color.green, "B"=color.red]
我试过了:
public void paint(Graphics g){
g.setColor(hashMap.get("B")
g.setColor(hashMap.get("G")
g.drawString(list, 10, 10)
}
但这似乎是整个文本的颜色为绿色或红色可以解释如何循环名为list的数组并使用g.drawString
相应地为每个值着色?
修改
for (int u = 0; u < people.size(); u++) {
Person p = people.get(u);
list[u] = p.getGenderAsChar(); colorMap.put(r.getGenderAsChar(),r.getColorRepresentation() }
public void paintComponent(Graphics g){
super.paintComponent(g);
for (int c = 0; c< list.length; c++)
Person p = people.get(u);
g.setColor(hashMap.getColorRepresentation);
g.drawString(list[c], 10 + c*10, 20);
}
答案 0 :(得分:8)
首先是您的实际问题:只需查看JavaDoc drawString()即可。该方法需要一个 String 。
所以你应该写一些像
这样的代码for (i=0; i < list.length(); i++) {
g.setColor(hashMap.get(list[i]));
g.drawString(list[i], 10 + i*10, 10);
}
或类似的东西。
换句话说:您无法将整个数组传递到该调用中。对于要显示的每个字符串,您必须将其命名为一次;当然,你必须考虑水平间距。
或者,你可以简单地将你的字符串联成一个字符串BBBG ......但是你失去了改变不同字符颜色的能力。
然后超越那个。
你的抽象是错误的 - 你做得不好&#34; OO&#34;这里。
OO不是关于&#34;让我们问一些关于它的状态的对象,或者在你的情况下,它的类型&#34;然后根据它做出决定。相反,你告诉对象做正确的事情。
含义;像
这样的代码if (people.get(u) instanceof Boy) {
list[u]="B";
hashMap.put(list[u], Color.red);
}
应该是
之类的东西Person p = people.get(u);
list[u] = p.getGenderAsChar(); // to return either 'B' or 'G'
背后的想法:你有一个(抽象)基类Person;然后创建特定的子类Boy extends Person
和Girl extends Person
。
那些 类的人实现该方法getGenderAsChar()
并返回不同的值。
与
类似hashMap.put(list[u], Color.green);
您知道,列表无论如何只包含B或G字符串。所以你只需将(B,红色)或(G,绿色)放入该地图。没有任何意义。
相反,您可以再次使用抽象基本方法getColorRepresentation()
,并且Boy类返回Color.red;和女孩返回Color.green。