2011-12-01 138 views
1

我在问这是非常不得已的手段,因为我无法找到任何与此随机数字游戏有关的问题的帮助。JLabel无法在ActionListener中正确识别

问题是,当我尝试运行该程序时,ActionListener中出现错误,指出“guessResult无法解析”。

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.util.Random; 

public class Project8 extends JFrame 
{ 
private JTextField numGuessFld; 
private JButton guessBtn, guessAgainBtn, playAgainBtn; 
private int randNum; 
private Container c = getContentPane(); 
private int numGuessed; 
private Random rn = new Random(); 



public static void main(String[] args) 
{ 
    Project8 frm = new Project8(); 
    frm.setSize(400,150); 
    frm.setVisible(true); 
    frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
}//end main 

public Project8() 
{ 
    c.setLayout(new FlowLayout()); 
    setTitle("Number Guessing Game"); 

    JLabel gameDescriptLbl = new JLabel("I have a number between 1 and 1000. Can you guess my number?"); 
    c.add(gameDescriptLbl); 

    JLabel numGuessLbl = new JLabel("Please enter your first guess. "); 
    c.add(numGuessLbl); 

    numGuessFld = new JTextField(4); 
    c.add(numGuessFld); 

    guessBtn = new JButton("Guess"); 
    c.add(guessBtn); 

    guessAgainBtn = new JButton("Guess Again"); 
    guessAgainBtn.setEnabled(false); 
    c.add(guessAgainBtn); 

    playAgainBtn = new JButton("Play Again?"); 
    playAgainBtn.setEnabled(false); 
    c.add(playAgainBtn); 

    JLabel guessResult = new JLabel(""); 
    c.add(guessResult); 

    Handler handler = new Handler(); 

    numGuessFld.addActionListener(handler); 
    guessBtn.addActionListener(handler); 
    guessAgainBtn.addActionListener(handler); 
    playAgainBtn.addActionListener(handler); 

    randNum = rn.nextInt(1000)+1; 
}//end constructor Project8 

private class Handler implements ActionListener 
{  
    public void actionPerformed(ActionEvent e) 
    {   
     if (e.getSource() == guessBtn) 
     {    
      String input = numGuessFld.getText(); 
      numGuessed = Integer.parseInt(input); 
      System.out.println(numGuessed); 
      System.out.println(randNum);     

      if (numGuessed < randNum) 
      { 
       c.setBackground(Color.blue);      
       guessResult.setText("Too low!"); 
       guessAgainBtn.setEnabled(true);      
      } 
      else if (numGuessed > randNum) 
      { 
       c.setBackground(Color.red); 
       guessResult.setText("Too high!");     
       guessAgainBtn.setEnabled(true);     
      } 
      else if (numGuessed == randNum) 
      { 
       c.setBackground(Color.yellow); 
       guessResult.setText("Correct!");      
       guessAgainBtn.setEnabled(false); 
       guessBtn.setEnabled(false); 
       numGuessFld.setBackground(Color.green); 
       numGuessFld.setEditable(false); 
       playAgainBtn.setEnabled(true);     
      } 

     }//end guessBtn if   

     if (e.getSource() == guessAgainBtn) 
     { 
      numGuessFld.setText(""); 

     }//end guessAgainBtn if 

     if (e.getSource() == playAgainBtn) 
     { 
      c.setBackground(null); 
      numGuessFld.setText("");     
      guessAgainBtn.setEnabled(false); 
      guessBtn.setEnabled(true); 
      numGuessFld.setBackground(null); 
      numGuessFld.setEditable(true); 
      playAgainBtn.setEnabled(false); 
      randNum = rn.nextInt(1000)+1; 
     }//end playAgainBtn if   
    }//end ActionPerformed 
}//end Handler 
}//end Project8 

任何帮助将不胜感激...特别是如果它在4:30之前到达:)谢谢!

+0

好像你正在使用一些简单的文本编辑器。如果您使用Eclipse,Netbeans或IntelliJ IDEA等IDE,它们可以帮助您很多,因为它们能够在运行代码之前突出显示这些错误,并提供一些有用的提示。 – hage

+0

@hage我正在使用eclipse,这是我跑到问题之前,甚至在我跑它之前。还是)感谢你的建议!我的“教授”(不是一个非常好的教授imho)使我们在课堂上使用JGrasp,但是我在我的闪存驱动器上使用了eclipse作为便携式应用程序,所以我编码并复制粘贴到JGrasp中。 – enderal

+1

_特别是如果它在4:30之前到达 - 哈哈,在哪个时区作业截止时间? – kleopatra

回答

2

您有一个范围界定问题。试着制作guessResult a 成员变量,而不是本地变量

+0

非常感谢您的快速响应!像魅力一样工作! (当我允许时,我会接受答案)这给了我这么多麻烦,以便于解决这个问题...再次感谢! – enderal

1

guessResult仅在您的构造函数中定义,因此无法通过任何其他方法查看。如果你想让它可以在别处访问,你应该让它成为你班级的成员。