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