【发布时间】:2020-12-18 17:40:03
【问题描述】:
我正在尝试计算用户在使用 swing 的 Java GUI 程序中猜测数字的次数。
我创建了这些变量来跟踪尝试次数:
JLabel lblNumberOfTries = new JLabel("Number of tries:");
lblNumberOfTries.setBounds(136, 219, 90, 13);
getContentPane().add(lblNumberOfTries);
txtNumberOfTries = new JTextField();
txtNumberOfTries.setBounds(223, 219, 42, 13);
getContentPane().add(txtNumberOfTries);
txtNumberOfTries.setColumns(10);
我需要在游戏重新开始时重置它们。出于某种原因,我可以重置 java 字段,但不能重置标签:
txtNumberOfTries.setText(""); // this is ok
lblNumberOfTries.setText(""); // this gives an error
这是我得到的错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
lblNumberOfTries cannot be resolved
at GuessingGame.newGame(GuessingGame.java:50)
at GuessingGame.main(GuessingGame.java:110)
这是我的程序中标签和字段所在的类和函数:
import javax.swing.JFrame;
public class GuessingGame extends JFrame {
public GuessingGame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("Tim's Hi-Lo Guessing Game");
getContentPane().setLayout(null);
JLabel lblTitle = new JLabel("Tim's Hi-Lo Guessing Game");
lblTitle.setFont(new Font("Tahoma", Font.BOLD, 15));
lblTitle.setHorizontalAlignment(SwingConstants.CENTER);
lblTitle.setBounds(0, 10, 436, 32);
getContentPane().add(lblTitle);
JLabel lblGuessANumber = new JLabel("Guess a number between 1 and 100:");
lblGuessANumber.setBackground(new Color(240, 240, 240));
lblGuessANumber.setHorizontalAlignment(SwingConstants.RIGHT);
lblGuessANumber.setBounds(147, 54, 215, 13);
getContentPane().add(lblGuessANumber);
txtGuess = new JTextField();
txtGuess.addActionListener((ActionEvent e) -> {
checkGuess();
});
txtGuess.setHorizontalAlignment(SwingConstants.RIGHT);
txtGuess.setBounds(260, 122, 27, 19);
getContentPane().add(txtGuess);
txtGuess.setColumns(10);
JButton btnGuess = new JButton("Guess!");
btnGuess.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
checkGuess();
}
});
btnGuess.setBounds(172, 121, 85, 21);
getContentPane().add(btnGuess);
lblOutput = new JLabel("Enter a number above and click Guess!");
lblOutput.setHorizontalAlignment(SwingConstants.CENTER);
lblOutput.setBounds(58, 196, 350, 13);
getContentPane().add(lblOutput);
JLabel lblNumberOfTries = new JLabel("Number of tries:");
lblNumberOfTries.setBounds(136, 219, 90, 13);
getContentPane().add(lblNumberOfTries);
txtNumberOfTries = new JTextField();
txtNumberOfTries.setBounds(223, 219, 42, 13);
getContentPane().add(txtNumberOfTries);
txtNumberOfTries.setColumns(10);
}
public void newGame() {
theNumber = (int) (Math.random() * 100 + 1);
txtNumberOfTries.setText("");
lblNumberOfTries.setText("");
}
}
我做错了什么?
【问题讨论】:
-
我的猜测是
lblNumberOfTries在方法中被声明为局部变量,而您正试图从不同的方法访问它。您应该使其成为该类的成员,以便可以从该类的不同方法访问它。考虑发布minimal reproducible example,这样我就不必猜测您的问题是什么。 -
好的,我已经在更新的 OP 中包含了标签和字段在我的程序中的两个函数。如果我需要提供更多信息,请告诉我。
-
正是这个@Abra
标签: java swing compiler-errors jlabel