不能在JavaSwing中隐藏按钮和文本字段

5vf7fwbs  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(384)

我有一个游戏,用户试图猜测一个介于1到10之间的数字(或者1到100,不管你怎么设置)。
我展示了一个叫 btnPlayAgain 当用户赢或输的时候,询问他们是否想再玩一次。我想在程序启动时隐藏那个按钮,在他们输赢时显示它。
我想设置一个让你猜的按钮( btnGuess )当 btnPlayAgain 按钮不可见。但出于某种原因,这并没有发生。这个 btnPlayAgain 当用户看到“再次播放”按钮时,按钮仍然可见。
如果我尝试:

else {
            btnGuess.setVisible(false);
            txtGuess.setVisible(false);
            message = guess + " is correct. Let's play again!";
            btnPlayAgain.setVisible(true);
        }

按钮 btnGuess 当用户猜对时不会隐藏。“猜测是正确的。我们再玩一次吧。”信息不会被打印到屏幕上。
这是我玩游戏的功能和它的支持功能:

public void checkGuess() {
    btnPlayAgain.setVisible(false);
    String guessText = txtGuess.getText();
    txtGuess.setText("");// Empties the contents of the text field.
    String message = "";
    try {
        int guess = Integer.parseInt(guessText);
        if (numberOfTries == 0) {
            btnGuess.setVisible(false);
            txtGuess.setVisible(false);
            message = "You Lost! A new game has begun and you have 8 guesses remaining.";
            btnPlayAgain.setVisible(true);
        }
        else if (guess < theNumber) {
            message = guess + " is too low. Try again. You have " + numberOfTries + " tries left!";
        }
        else if (guess > theNumber) {
            message = guess + " is too high. Try again. You have " + numberOfTries + " tries left!";
        }
        else {
            btnGuess.setVisible(false);
            txtGuess.setVisible(false);
            message = guess + " is correct. Let's play again!";
            btnPlayAgain.setVisible(true);
        }
    } catch (Exception e) {
        message = "Enter a whole number between 1 and 10.";
    } finally {
        lblOutput.setText(message);
        txtGuess.requestFocus();
        txtGuess.selectAll();

    }
    decrementNumberOfTries();
}

public void newGame() {
    numberOfTries = 8;
    theNumber = (int) (Math.random() * 10 + 1);
}

public void decrementNumberOfTries() {
    --numberOfTries;        
}

这是我所有代码的链接。
这就是你玩游戏的窗口:

我想藏起来 Guess! 按钮和文本字段,并显示 playAgain 按钮。这个 playAgain 按钮应该允许用户开始一个新的游戏。我该怎么做?

tsm1rwdh

tsm1rwdh1#

问题是你 btnGuess 构造函数中的局部变量,而不是设置字段,因此 NullPointerException 当数字正确时抛出。既然你在抓 Exception ,则程序假定输入的数字无效。接住 NumberFormatException 而是为了避免在程序中遗漏错误。
在构造函数中,更改

JButton btnGuess = new JButton("Guess!");

this.btnGuess = new JButton("Guess!");

要正确重置游戏,您需要修改 newGame 方法仅显示适当的元素并重置输出标签的文本。

public void newGame() {
    numberOfTries = 8;
    theNumber = (int) (Math.random() * 10 + 1);
    btnGuess.setVisible(true);
    txtGuess.setVisible(true);
    btnPlayAgain.setVisible(false);
    lblOutput.setText("Enter a number above and click Guess!");
}

相关问题