Refre sh данных в JLabel - PullRequest
       6

Refre sh данных в JLabel

0 голосов
/ 18 февраля 2020

У меня есть программа, которая вычисляет целое число, а затем использует значение в JLabel. При создании intital все в порядке с инициализированным значением, но когда я изменяю значение int внутри метки, я не могу найти способ обновить JLabel. Соответствующий код выглядит следующим образом:

    JLabel carbLbl;
    int totCarbs = 0;

    public Main() {
        carbLbl = new JLabel("Total Carbs: " + totCarbs);
        carbLbl.setFont(new Font("KidSans", Font.PLAIN, 38));
        carbLbl.setAlignmentX(Component.RIGHT_ALIGNMENT);

    void addFoodToTable() {
        String[] s = new String[3];
        s = (String[]) foodData.get(foodChoice.getSelectedIndex());
        foodList.addRow(s);
        totCarbs += Integer.parseInt(s[2]);
        carbLbl.repaint();
    }
}

Очевидно, что кода гораздо больше, но слишком долго включать весь сценарий. Можно ли как-нибудь обновить метку всякий раз, когда я вызываю метод addFoodToTable()?

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

JLabel не «связан» с вашей целочисленной переменной. Когда вы меняете целое число, вам нужно обновить JLabel, используя carbLbl.setText(String.valueOf(totCarbs))

0 голосов
/ 18 февраля 2020

Нет ли способа просто обновить JLabel, используя исходные параметры конструктора?

carbLbl = new JLabel("Total Carbs: " + totCarbs);

Какие параметры? Существует только один параметр, String для отображения.

Компилятор объединяет жестко закодированную строку со значением вашей переменной "totCarbs", чтобы создать одну строку.

Компилятор, по существу, будет обрабатывать приведенный выше код следующим образом:

String text = "Total Carbs" + totCarbs;
carbLbl = new JLabel( text );

JLabel не знает, как была создана строка (ie. Переменная использовалась для построения строки) ,

Я понимаю концепцию объединения, но я просто чувствую, что это обходной путь

Это не обходной путь. API метода setText (...) указывает, что вы предоставляете одну строку. Итак, если вы хотите обновить метку, вам нужно предоставить всю строку.

...