当进度条达到0时,如何打开新的JFrame?

3

我正在尝试制作一个Java游戏,在玩家的健康值为零时游戏应该结束,但是目前当我的进度条达到零时什么也没有发生。以下是我的代码,请问是否有问题?

JProgressBar healthProgressBar = new JProgressBar();
    lblHealth.setLabelFor(healthProgressBar);
    healthProgressBar.setStringPainted(true);
    healthProgressBar.setValue(100);
    healthProgressBar.setMinimum(0);
    healthProgressBar.setBounds(318, 103, 166, 20);
    mainGame.add(healthProgressBar);

    if(healthProgressBar.getValue() <= healthProgressBar.getMinimum())
    {
        frame5.setVisible(false);
        frame7.setVisible(true);
    }

我假设你的游戏主循环在代码后面,所以这里的条件是在将进度条添加到游戏后立即评估的,而不是在游戏使用它时评估的。如果你想检查进度条是否有效,可以尝试 progressBar.setValue(0);,但你可能需要在主循环中某个位置调用你的条件... - aveuiller
1
请查看使用多个JFrames,好还是坏的做法? - Andrew Thompson
3个回答

3
您正在调用此代码,
if(healthProgressBar.getValue() <= healthProgressBar.getMinimum())

在创建JProgressBar的相同区域,而不是更改JProgressBar状态的区域进行if块测试,因此if块测试永远不会为真。解决方案是在更改JProgressBar的区域调用此if测试。但是,请重新考虑您想要交换JFrames的愿望。相反,如果您重新设置单个游戏JFrame,则用户会受益更多。


3

在将值设为100后,您实际上正在检查它,因此它始终返回false

相反,您可以使用监听器,例如:

healthProgressBar.addChangeListener(e -> {
    if (healthProgressBar.getValue() <= healthProgressBar.getMinimum()) {
        frame5.setVisible(false);
        frame7.setVisible(true);
    }
});

另一种方法是更改设置值到 healthProgressBar 的框架。


0

你只在它仍然为0的时候检查了一次值


我该如何多次检查它? - JavaProgrammingBeginner
我认为最好的方法是在更改值时检查它。 - SWdV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接