2014-12-23 2 views
0

Я знаю, как изменить цвет в Java от объекта JLabel, если вы делаете это такJava Изменение цвета 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

Что центр объявлен как? – haley

+0

Поскольку конструктор 'JLabel', который принимает цвет, и' setForeground() 'не возвращает JLabel, вы не можете. – GriffeyDog

+0

Ответ: вам нужно сделать переменную как в первом примере, а затем добавить ее к объекту центра. Кроме того, вы неправильно используете слово «динамический» – ControlAltDel

ответ

1

Что вы ищете, это builder pattern для 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); 
} 
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- Я собираюсь начать называть их «JLabes» слишком - Очень модно! : p

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); 
-1

Эта линия:

center.add(new JLabel("Antwoord Vraag"+ (i +1) +": "+antwoord.get(i),SwingConstants.LEFT)); 

находится в цикле для создания более компоненты 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 loo р:

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]); 
+0

См. мой ответ. Нет никакой проблемы, чтобы объявлять одну и ту же переменную снова и снова внутри цикла. Просто избавьтесь от оператора '[i]' array и вашего штрафа. – Elist

+0

Вам нужна 'JLabel' вне цикла? В противном случае массив избыточен. – Elist

+0

Я удалил массив и массив [i], и он отлично работает. Thx Elist – Bham

Смежные вопросы