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

时间:2015-04-10 15:00:50

标签: java eclipse swing if-statement jprogressbar

我试图制作一个java游戏,当玩家的生命值达到0时,游戏应该结束但是目前当我的进度条达到0时,没有任何事情发生在这里我的代码是否有问题?

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);
    }

3 个答案:

答案 0 :(得分:3)

您正在调用此代码,

if(healthProgressBar.getValue() <= healthProgressBar.getMinimum())

在您创建JProgressBar的同一区域和,其中JProgressBar的状态正在被更改,因此if块测试将永远不会成立。解决方法是在测试JProgressBar被更改的位置调用此方法。但也要重新考虑你交换JFrames的愿望。相反,如果您重新设置单个游戏JFrame,用户会好得多。

答案 1 :(得分:3)

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

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

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

其他方式是将您设置值的帧更改为healthProgressBar

答案 2 :(得分:0)

当值仍然为0时,您只检查一次值