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



我试图制作一个 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);
    }

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

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

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

另一种方法是更改将值设置为healthProgressBar的帧。

你正在调用这段代码,

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

在您创建 JProgressBar 的同一区域,而不是更改 JProgressBar 状态的区域,因此 if 块测试永远不会为真是有道理的。一个解决方案是调用这个 if 测试,你的 JProgressBar 正在被更改。但也要重新考虑你交换JFrames的愿望。相反,如果您重新设置单个游戏 JFrame,用户会好得多。

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