- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这里我有一些代码(缩短以显示最重要的部分)
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 Person
和 Girl 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/
我是一名优秀的程序员,十分优秀!