Reset Java 字段未解决的编译问题
Reset Java field unresolved compilation problem
我正在尝试计算用户使用 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)
这是 class 和函数,标签和字段在我的程序中:
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("");
}
}
我做错了什么?
好的,看完完整的文件,主要有两点:
您需要在 class
中定义一个字段 private JLabel lblNumberOfTries;
您还需要从 GuessingGame 构造函数(定义为 public GuessingGame()
的方法称为构造函数)中的第 98 行左右删除 'JLabel',使其变为 lblNumberOfTries = new JLabel("Number of tries:");
。这将阻止您重新声明变量。
有时,您还想添加一个名为 numberOfTries
的私有 int 字段
我正在尝试计算用户使用 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)
这是 class 和函数,标签和字段在我的程序中:
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("");
}
}
我做错了什么?
好的,看完完整的文件,主要有两点:
您需要在 class
中定义一个字段private JLabel lblNumberOfTries;
您还需要从 GuessingGame 构造函数(定义为 public GuessingGame()
的方法称为构造函数)中的第 98 行左右删除 'JLabel',使其变为 lblNumberOfTries = new JLabel("Number of tries:");
。这将阻止您重新声明变量。
有时,您还想添加一个名为 numberOfTries