簡體   English   中英

Java更改顏色JLabel

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM