[英]Java change color JLabel
我知道如何通过JLabel对象在Java中更改颜色
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对象的颜色。
您正在寻找的是JLabel
的构建器模式 ,而AFAIK不存在。 您可以创建自己的构建器类,也可以使用自己的以颜色作为构造器参数的类扩展JLabel
(这很奇怪,因为JLabel
具有许多属性,请想象如果每个属性都具有自己的特殊构造函数会发生什么情况)。
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);
}
有两种方法可以执行此操作,但标准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);
您将不得不将其分成多行:
JLabel label = new JLabel("Antwoord Vraag"+ (i +1) +": "+antwoord.get(i),SwingConstants.LEFT);
label.setBackground(Color.GREEN);
label.setOpaque(true);
center.add(label);
PS-我将开始称它们为“ JLabes”-更加时髦! :p
这行:
center.add(new JLabel("Antwoord Vraag"+ (i +1) +": "+antwoord.get(i),SwingConstants.LEFT));
在for循环中用于创建更多JLabel
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]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.