使用g.drawString()循环遍历数组

时间:2016-12-14 19:52:12

标签: java

这里我有一些代码(缩写为显示最重要的部分)

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);

}

1 个答案:

答案 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 PersonGirl extends Person

那些 类的人实现该方法getGenderAsChar()并返回不同的值。

类似
hashMap.put(list[u], Color.green);

您知道,列表无论如何只包含B或G字符串。所以你只需将(B,红色)或(G,绿色)放入该地图。没有任何意义。

相反,您可以再次使用抽象基本方法getColorRepresentation(),并且Boy类返回Color.red;和女孩返回Color.green。