java如何根据另一个类更改状态更新进度条?
我目前正在开发一款游戏,我正在尝试实现一个健康栏,它将在玩家每次受到伤害时更新,我目前已将其设置为在布局中的单独面板中:
// menu is the bit with the health bar
ControlPanel menu = new ControlPanel(this);
window.add(menu.getMainPanel(), BorderLayout.NORTH);
// view is the part of the window the game runs in
window.add(view, BorderLayout.CENTER);
我听说要使其更新,您可以使用changelistener,但要使其正常运行,我遇到了一些困难,到目前为止,我得到的是:
private JProgressBar healthProgressBar;
private Player player;
public ControlPanel(Game game) {
player = game.getPlayer();
healthProgressBar.setString(player.getHealth() + "/100");
healthProgressBar.setStringPainted(true);
healthProgressBar.setValue(player.getHealth());
healthProgressBar.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
int oldHealth = player.getHealth();
player = (Player) e.getSource();
if (player.getHealth() != oldHealth) {
healthProgressBar.setValue(player.getHealth());
}
}
});
public JPanel getMainPanel() {
return mainPanel;
}
它将使进度条显示在我想要的地方,并且它将具有我赋予它的值,但是当玩家受到伤害时它不会更新,如果有人知道如何使其工作,那将非常感谢
# 1 楼答案
好的,这是一个有点冗长的答案,但我只想展示一个使用侦听器来允许松散耦合和更新JProgressBar的示例
假设您有一个非GUI播放器对象,它有一个String name属性和一个int health属性,并使用属性更改支持来允许添加侦听器。此类的一个片段可能如下所示:
请注意,玩家类不需要知道它显示在什么GUI中,观察者将如何处理他们观察到的任何信息
现在我们把这个播放器放在一个简单的GUI中,一个JPanel,它有一个JSlider,允许我们更改播放器健康属性的状态。此类代码的一个片段可能如下所示:
然后在另一个类中,一个有JProgressBars的类中,我们可以在progressBar中显示玩家的健康状况,并让侦听器在健康状况发生变化时更新progressBar:
我们将通过setProgress方法更新JProgressBar:
整个工作示例可能是这样的: