Я использую JProgressBar
в качестве полосы здоровья, поэтому я хочу вручную установить максимум и значение полос по ходу игры. Игра представляет собой игру про покемонов и позволяет вызывать новых покемонов. Эти новые покемоны могут иметь разные максимальные значения здоровья и текущие значения здоровья, поэтому я называю progressBar.setMaximum(newPokemonMaxHealth)
и progressBar.setValue(currentPokemonHealth)
. Я даже звоню progressBar.repaint()
, progressBar.revalidate()
и progressBar.update(progressBar.getGraphics()
, и ни один из них мне не помог.
Вот инициализация индикатора выполнения:
UIManager.put("ProgressBar.selectionForeground", Color.BLACK);
poke1Health = new JProgressBar(0);
poke1Health.setMaximum(board.getTrainer1().getBattlingPokemon().getMaxHealth());
poke1Health.setValue(board.getTrainer1().getBattlingPokemon().getCurrentHealth());
poke1Health.setStringPainted(true);
poke1Health.setForeground(Color.green);
poke1Health.setBackground(Color.red);
poke1Health.setPreferredSize(new Dimension(50, 10));
centerPanel1.add(poke1Health);
Затем, когда я пытаюсь изменить максимум и значение:
board.getTrainer1().pokemonChanged(1);
poke1Health.setValue(board.getTrainer1().getPokemon(0).getCurrentHealth());
poke1Health.setMaximum(board.getTrainer1().getPokemon(0).getMaxHealth());
poke1Health.repaint();
poke1Health.revalidate();
poke1Health.update(poke1Health.getGraphics());
Я распечатал значения текущего и максимального здоровья разных покемонов, и значения были такими, какими они должны были быть, что показывает, что значения не являются проблемой.
По какой-то причине значение баров не хочет меняться, а максимум меняется.
Когда новое здоровье покемонов выше, чем предыдущее здоровье покемонов, оно не будет обновлять значение. Если новое здоровье покемонов ниже, чем предыдущее здоровье покемонов, оно обновит значение, без проблем. Вот что я напечатал:
Покемон 1 Максимальное здоровье: 49
Покемон 2 Максимальное здоровье: 50
Покемон 1 Текущее здоровье: 49
Покемон 2 Текущее здоровье: 50
Затем я напечатал значение баров до и после того, как установил новый максимум и новое значение.
Количество баров до: 49
Количество баров после: 49
Бары Макс до: 49
Макс баров после: 50
По какой-то причине максимальное значение изменилось, но значение не изменилось. Распечатка, которую я сделал, чтобы получить текущее здоровье Pokemon 2, — это тот же код, который я использовал, чтобы установить новое значение полосы. Здесь:
poke1Health.setValue(board.getTrainer1().getBattlingPokemon().getCurrentHealth());
System.out.println("Pokemon 2 Current Health: " + board.getTrainer1().getBattlingPokemon().getCurrentHealth());
Пожалуйста, помогите мне здесь! Я не могу понять, почему значение индикатора выполнения не хочет обновляться!!!
Спасибо!
import java.awt.FlowLayout; import javax.swing.JProgressBar; public class JProgressBarError{ public static void main(String args[]) { JProgressBar bar = new JProgressBar(0, 10); bar.setValue(10); System.out.println(bar.getValue()); System.out.println(bar.getMaximum()); bar.setMaximum(20); bar.setValue(20); System.out.println(bar.getValue()); System.out.println(bar.getMaximum()); } }
Это сработало, и значение можно было изменить, но по какой-то причине это не работает в моем коде! - person Cole   schedule 06.12.2016