gpt4 book ai didi

java - 使用 g.drawString() 遍历数组

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:06:56 25 4
gpt4 key购买 nike

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

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 的颜色为每个值着色,并返回此数组着色..

所以我的 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);

}

最佳答案

首先针对您的实际问题:只需查看 drawString() 的 JavaDoc .该方法需要一个 String

所以你应该写一些像这样的代码

for (i=0; i < list.length(); i++) {
g.setColor(hashMap.get(list[i]));
g.drawString(list[i], 10 + i*10, 10);
}

或类似的东西。

换句话说:您不能将整个数组传递给该调用。您必须为每个要显示的字符串调用它一次;当然,您还必须考虑水平间距。

或者,您可以简单地将您的字符连接成一个字符串 BBBG... 但是这样您就失去了为不同字符更改颜色的能力。

但除此之外。

你的抽象是错误的 - 你在这里没有做好“面向对象”。

OO 不是关于“让某个对象询问它的​​状态,或者在你的情况下,它的类型”,然后据此做出决定。相反,您告诉对象做正确的事。

意义;像

这样的代码
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, red) 或 (G, green) 放入该 Map 中即可。没有任何意义。

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

关于java - 使用 g.drawString() 遍历数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41151059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com