【发布时间】:2017-10-06 22:01:01
【问题描述】:
我已经搜索了所有其他问题,但没有运气。我已经尝试了四个多小时不同的事情,但绝对没有任何进展(或错误,这更令人沮丧)所以我想我终于要在这里问了。
我正在开发一个小型生存游戏作为一个业余项目,以自学更多关于 Java UI 元素的知识。玩家寻找食物等,这是一场与饥饿和口渴的赛跑。我的情况是这样的:
游戏打开一个控制器(MainController),该控制器有几个指示角色统计数据的条;对于这个例子,我们会说饥饿和口渴。
玩家可以点击一个按钮来打开角色的物品栏,其中包括他们的食物。这会在新控制器 (InventoryController) 上打开一个新窗口,其中列出了与角色的库存项目相对应的按钮。
当玩家点击食物时,角色的饥饿值会下降,相关的进度条也会下降。
问题是:角色的内部饥饿状态下降,进度条的进度下降,但进度条永远不会在视觉上更新,即使它在内部更新。
举个简单的例子:
public class MainController implements Initializable {
@FXML private ProgressBar hungerBar;
public void initialize(URL url, ResourceBundle rb) {
updateBars();
}
public void updateBars(){
hungerBar.setProgress(CC.pc.getHunger()/100);
}
}
这一开始是有效的。它成功地获取了角色的饥饿值,将其除以 100,然后设置标准(在本例中为 0.40)。没有问题。该条出现并且已满 40%。但是,当我打开并使用第二个控制器时,什么也没有发生。
public class InventoryController implements Initializable {
@Override
public void initialize(URL url, ResourceBundle rb) {
}
@FXML private void feedVenison(ActionEvent event) throws Exception{
FXMLLoader loader = new FXMLLoader(getClass().getResource("Main.fxml"));
loader.load();
PlayController c = loader.<PlayController>getController();
//Stuff that does the math and changes the character's stats here;
//cut short for clarity.
c.updateBars();
}
}
我可以添加一些打印命令,例如 System.out.println(hungerBar.getProgress()),然后看到一切正常。角色的饥饿感降低,反过来,进度条的进度也会更新,并且在功能上会降低。但是,无论设置在 0.01 和 1 之间的哪个位置,该条都不会改变。
我已经尝试了再尝试,但我已经束手无策了!我显然做错了什么,我确信这很明显,但我不知道什么。没有错误,它只是不起作用。我只是在这项工作中使用了错误的工具吗?什么给了?
更新 1:
更多挖掘将我带到this question,这与我正在尝试做的非常相似。不幸的是,它也没有答案。它有一条评论指向我试图实现的this Oracle doc,。
public void updateBars(){
DoubleProperty hunger = new SimpleDoubleProperty(CC.pc.getHunger());
hungerBar.progressProperty().bind(hunger);
}
但又一次,我遇到了完全相同的问题。 条形图在内部更新,但 UI 从未更改,并且始终显示不正确的静态量。我该怎么办?
更新 2:
我一直在挖掘,但每次我认为我找到了答案时,它只是一遍又一遍地做同样的事情。试用this, but same result.
public void updateBars(){
maybeWillWork();
}
public void maybeWillWork()
{
Platform.runLater(new Runnable() {
@Override public void run() {
hungerBar.setProgress(CC.pc.getHunger()/100);
System.out.println("It ran!");
}
});
}
完全相同的结果。
请。我究竟做错了什么?我拒绝相信整个 StackOverflow 都像我一样被一个简单的 ProgressBar 难住了;必须有人知道我犯了什么愚蠢的错误。
更新 3:
嗯,这很令人沮丧,但我得到了它的工作。我已经在下面发布了答案。
【问题讨论】:
-
我很欣赏您的回复,但实际上并不相同。他做的事情和我完全不同。
标签: java javafx progress-bar fxml