我知道如何在JLabel对象中更改颜色,如果你这样做
JLabel label = new JLabel("label text");
label.setForeground(Color.red);
但::
我像这样创建我的JLabes动态
center.add(new JLabel("Antwoord Vraag"+ (i +1) +": "+antwoord.get(i),SwingConstants.LEFT));
如何在不给对象命名的情况下更改JLabel对象的颜色。
答案 0 :(得分:1)
您要找的是JLabel
builder pattern,其中AFAIK不存在。
您可以创建自己的构建器类,也可以使用自己的类扩展JLabel
,这个类将颜色作为构造函数参数(这很奇怪,因为JLabel
有很多属性,想象一下如果每个属性都会发生什么&# 39;自己的特殊构造函数)。
JLabelBuilder示例:
public class JLabelBuilder {
private Color fColor;
private String text;
public void setForegroundColor(Color c) {
fColor = c;
}
public void setText(String t) {
text = t;
}
public JLabel build() {
if (text != null && fColor != null) {
JLabel label = new JLabel(text);
label.setForeground(fColor);
return label;
} else {
...
}
}
}
用法:
center.add(new JLabelBuilder()
.setText("Antwoord Vraag" + (i + 1) + ": " + antwoord.get(i))
.setForegroundColor(Color.red)
.build());
无论如何,我还没有看到另外两行代码的危害。出于可读性的原因,明确声明对象变量也是一种很好的做法。这也适用于循环:
for(int i = 0 ; i < maxCounter ; i++) {
String text = "Antwoord Vraag" + (i + 1) + ": " + antwoord.get(i);
JLabel label = new JLabel(text, SwingConstants.LEFT);
label.setForeground(Color.red);
center.add(label);
}
答案 1 :(得分:1)
有几种方法可以做到这一点,但不能使用标准JLabel
- 您需要自己的子类或帮助程序。例如:
public class CLabel extends JLabel
{
public CLabel(String text)
{
super(text);
}
public CLabel(String text, Color color)
{
super(text);
setForeground(color);
}
public CLabel withColor(Color color)
{
setForeground(color);
return this;
}
}
然后您可以执行以下任一操作:
new CLabel("Hello", Color.RED);
new CLabel("Hello").withColor(Color.RED);
答案 2 :(得分:0)
您必须将其拆分为多行:
JLabel label = new JLabel("Antwoord Vraag"+ (i +1) +": "+antwoord.get(i),SwingConstants.LEFT);
label.setBackground(Color.GREEN);
label.setOpaque(true);
center.add(label);
PS-我将开始打电话给他们&#34; JLabes&#34;太时髦了! :P
答案 3 :(得分:-1)
这一行:
center.add(new JLabel("Antwoord Vraag"+ (i +1) +": "+antwoord.get(i),SwingConstants.LEFT));
用于创建更多JLabel的for循环
for(int i = 0; i<maxCounter; i++)
{
// Goede Antwoorden toevoegen aan de center
center.add(new JLabel("Antwoord Vraag"+ (i +1) +": "+antwoord.get(i),SwingConstants.LEFT));
}
因为这在for循环中不起作用:
JLabel label[i] = new JLabel("Antwoord Vraag"+ (i +1) +": "+antwoord.get(i),SwingConstants.LEFT);
是否有溶液可以改变颜色
我已经解决了这个问题。 在我开始循环之前,我创建了一个数组:
JLabel[] labels = new JLabel[maxCounter];
然后在forloop中:
labels[i] = new JLabel("Antwoord Vraag"+ (i +1) +": "+antwoord.get(i),SwingConstants.LEFT);
// verander de kleur van de labels
labels[i].setForeground(rood);
center.add(labels[i]);