Java改变颜色JLabel

时间:2014-12-23 19:08:43

标签: java colors jlabel

我知道如何在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对象的颜色。

4 个答案:

答案 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]);