Переписать метки, используя методы - PullRequest
0 голосов
/ 16 ноября 2018

Итак, чтобы быть более конкретным, я хочу иметь возможность сделать "changeLabel (lableHere, textHere);" но я не знаю, как указать этикетку. чтобы упростить мой запрос, я хочу перейти от

public static void method1(String TextToSet){
    if(variable.isVisible()==false){
        variable.setVisible(true);
        variable.setText(TextToSet);
    }else if(variable.isVisible()==true){
        variable.setVisible(false);
    }
}
public static void method2(String TextToSet){
    if(variable2.isVisible()==false){
        variable2.setVisible(true);
        variable2.setText(TextToSet);
    }else if(variable2.isVisible()==true){
        variable2.setVisible(false);
    }
}

или что я сейчас использую:

    public static void method(String VariableIWantToChange, String TextToSet){
    if(VariableIWantToChange.equalsIgnoreCase("Variable1"){
        if(Variable1.isVisible()==false){
            Variable1.setVisible(true);
            Variable1.setText(TextToSet);
        }
        else if(Variable1.isVisible()==true){
            Variable1.setVisible(false);
        }
    }
    if(VariableIWantToChange.equalIgnoreCase("Variable2"){
        if(Variable2.isVisible()==false){
            Variable2.setVisible(true);
            Variable2.setText(TextToSet);
        }
        else if(Variable2.isVisible()==true){
            Variable2.setVisible(false);
        }
    }
}

(этот метод становится действительно длинным после нескольких переменных)

и вместо этого есть один метод, похожий на этот

public static void method( Labeltochange ,String TextToSet){
    if(Labeltochange.isVisible()==false){
        Labeltochange.setVisible(true);
        Labeltochange.setText(TextToSet);
    }
}

, который позволяет изменить метку, выполнив method(LabelToChange, TextToSet);

1 Ответ

0 голосов
/ 16 ноября 2018

Реальное требование здесь: вы хотите отобразить имя (String) на некоторый элемент пользовательского интерфейса (может быть, JLabel, может, JButton, который заботится).

Ответ: используйте соответствующую структуру данных,как Map<String, JComponent>.

Просто заполнить эту карту в какой-то момент времени:

Map<String, JComponent> componentsByName = new HashMap<>(); ...
componentsByName.put("label1", labelA);

Итак, позже вы просто делаете componentsByName.get() дляполучить ... компонент по его «имени».Затем для вызова любого метода, который вы хотите вызвать для этого объекта.

Другими словами: вам абсолютно не следует заниматься такими цепочками if / else.Каждый раз, когда ваш пользовательский интерфейс получает новую вещь или элемент удаляется, вы должны обновить код в миллионе мест.

...