2015-08-24 7 views
0

Итак, вот сделка. Я не хочу писать 50+ если утверждения или переключатели, если это возможно.Java использует переменную как другую переменную

Установки: У меня есть Основной класс, который является графическим интерфейсом. В этом графическом интерфейсе у меня есть JLabel, в котором я хочу изменить свой цвет фона.

Он был инициализирован как статический JLabel, поэтому его можно установить другими классами, и это работает нормально.

Основной класс

goodornot.setBackground(Color.LIGHT_GRAY); 

в другом классе, который принимает входные данные из сценария я хочу переменные настройки, которые являются общими.

PerfLoop класс

RunChecks.rcMin = 50; 
RunChecks.rcMax = 75; 
RunChecks.changeColor = "goodornot"; 
String[] one = linecut.split("="); <-- I am splitting a string IGNORE 
RunChecks.rcToCheck = Integer.parseInt(one[1]); 
RunChecks rc = new RunChecks(); 
new Thread(rc).start(); 

Итак, я все, что и она выглядит великолепно и без ошибок.

сейчас в другом классе (runChecks) Я пытаюсь вытащить переменные дерева так, чтобы они могли быть заменены универсальными переменными, но у меня есть одна проблема.

RunChecks класса

public void run() { 
     // TODO Auto-generated method stub 
     if (rcToCheck <= rcMin){ 
      Main.changeColor.setBackground(Color.GREEN); 
     } else if(){ 
     } 

Я не могу использовать changeColor здесь, чтобы установить цвет goodornot. Как я могу получить переменную changeColor для представления того, что нужно перейти в Main. (Прямо здесь) .setBackground (Color.GREEN)?

Я думаю, что есть способ, но для жизни меня я попробовал кучу разных способов и не пошел.

Да все переменные устанавливаются как статические строки и int.

благодаря

ответ

0

Если я понимаю проблему, вот один подход:

Настроенный коллекцию JLabels, например:

static HashMap<String,JLabel> labels; 

, которая заполняется со всеми этикетками. Затем вы можете динамически ссылаться на эти метки по ключу:

labels.get("**changeColor**").setBackground(Color.GREEN); 
2

Вы открываете новую тему, поэтому вам нужна ссылка на ваш ярлык. Попробуйте следующее:

class RunChecks implements Runnable 
{ 
    private JLabel label; 

    public RunChecks(JLabel label) 
    { 
     this.label = label; 
    } 

    public void run() 
    { 
     if (rcToCheck <= rcMin){ 
      label.setBackground(Color.GREEN); 
     } else if(){ 
     } 
    } 
} 

...

RunChecks rc = new RunChecks(yourLabelVariableHere); 
    new Thread(rc).start(); 
+0

Если вы читали мой "это не сработало" комментарий я извиняться. На самом деле это работа и два других метода, хотя и не очень элегантный. Я никогда не понимал, что утверждение if никогда не установит цвет, потому что логика никогда не вызовет LOL самые маленькие вещи! Поэтому я сам правильно сформулировал это правильно, но полностью пропустил логику ... полагаю, мне нужно больше кофе ... – reddragon72

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