Почему JProgressBar не следует изменять после добавления в JPanel? - PullRequest
0 голосов
/ 12 июня 2018

Прямо и просто: Представьте, что мы находимся в классе, который расширяет JPanel

JProgressBar bar = new JProgressBar(0,0,10);
add(bar);

bar.setValue(5); //Works - You can visually see the change
bar = new JProgressBar(0,0,10);
bar.setValue(10); //Works - You can NOT visually see the change

Почему это так?

И нет, я нигде не мог найти то, что смотрел.Я искал этот конкретный вопрос повсюду.

1 Ответ

0 голосов
/ 13 июня 2018

Переменные Java действуют (по сути) как указатели.

Вы создаете JProgressBar и добавляете его в JPanel - и сохраняете указатель на это в переменной bar.Когда вы звоните bar = new JProgressBar(0, 0, 10);, вы изменяете то, на что указывает указатель, но не изменяете исходный JProgressBar (тот, который был добавлен к вашему JPanel), теперь у вас есть новый , другой JProgressBar (который не добавлен к вашему JPanel), и поэтому установка его значения не изменяет то, которое является видимым на вашемJPanel.

Это та же самая причина, по которой:

String name = "Billy";
String otherName = name;
name = "Jimmy";
System.out.println(otherName);

напечатает Billy.

...