2013-12-23 26 views
0

我想在另一種方法中使用變量字母。我已經將變量聲明爲方法外的靜態變量,但它在打印時仍然不顯示。相反,它顯示爲空。整個代碼如下。感謝您的高級幫助。如何在多種方法中使用變量?

package Game; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyEvent; 
import javax.swing.*; 

class GameStructure { 
    private String []wordList = {"javatar","java","activity","alaska","appearance","article", 
      "automobile","basket","birthday","canada","central","character","chicken","chosen", 
      "cutting","daily","darkness","diagram","disappear","driving","effort","establish","exact", 
      "establishment","fifteen","football","foreign","frequently","frighten","function","gradually", 
      "hurried","identity","importance","impossible","invented","italian","journey","lincoln", 
      "london","massage","minerals","outer","paint","particles","personal","physical","progress", 
      "quarter","recognise","replace","rhythm","situation","slightly","steady","stepped", 
      "strike","successful","sudden","terrible","traffic","unusual","volume","yesterday"}; 
    private JTextField tf; 
    private JLabel jl2; 
    static String letter; 

    public void window() { 
     JMenuBar menuBar = new JMenuBar(); 
     JMenu menu = new JMenu("File"); 
     menu.setMnemonic(KeyEvent.VK_A); 
     menuBar.add(menu); 
     JMenuItem menuItem = new JMenuItem("Developer", KeyEvent.VK_T); 
    menu.add(menuItem); 
    JMenuItem menuItem2 = new JMenuItem("Instructions", KeyEvent.VK_T); 
    menu.add(menuItem2); 
    JMenuItem menuItem3 = new JMenuItem("Restart", KeyEvent.VK_T); 
    menu.add(menuItem3); 
    JMenuItem menuItem4 = new JMenuItem("Exit", KeyEvent.VK_T); 
    menu.add(menuItem4); 

     ImageIcon ic = new ImageIcon("hangman2.png"); 
     JFrame gameFrame = new JFrame(); 
     JPanel bottomRight = new JPanel(); 
     JPanel bottomLeft = new JPanel(); 
     JPanel top = new JPanel(); 
     JPanel bottom = new JPanel(); 
     JPanel imgPane = new JPanel(); 
     JPanel panel1 = new JPanel(); 
     bottom.setLayout(new BoxLayout(bottom, BoxLayout.X_AXIS)); 
     imgPane.setLayout(new BorderLayout()); 
     panel1.setLayout(new BorderLayout()); 
     panel1.setOpaque(false);//!! 
     top.setBorder(BorderFactory.createTitledBorder("")); 
     bottom.setBorder(BorderFactory.createTitledBorder("")); 
     tf = new JTextField(1); 
     JLabel img = new JLabel(ic, JLabel.CENTER); 
     JLabel jl = new JLabel("Enter a letter", JLabel.CENTER); 
     jl2 = new JLabel("Letters used: ", JLabel.CENTER); 
     JLabel jl3 = new JLabel("__ ", JLabel.CENTER); 
     jl.setFont(new Font("Rockwell", Font.PLAIN, 20)); 
     tf.setFont(new Font("Rockwell", Font.PLAIN, 20)); 
     jl2.setFont(new Font("Rockwell", Font.PLAIN, 20)); 
     imgPane.add(img);//center 
     top.add(jl);//top center 
     top.add(tf);//top center 
     bottomLeft.add(jl2);//bottom left position 
     bottomRight.add(jl3);//bottom right position 
     bottom.add(bottomLeft);//bottom 
     bottom.add(bottomRight);//bottom 
     panel1.add(imgPane, BorderLayout.CENTER);//background image (center) 
     panel1.add(top, BorderLayout.NORTH);//text field and jlabel (top) 
     panel1.add(bottom, BorderLayout.SOUTH);// blank spaces and letters used (bottom) 
     gameFrame.setJMenuBar(menuBar); 
     gameFrame.setTitle("Hangman"); 
     gameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     gameFrame.setIconImage(
     new ImageIcon("hangmanIcon.png").getImage()); 
     gameFrame.setResizable(false); 
     gameFrame.add(panel1); 
     gameFrame.setSize(800, 500); 
     gameFrame.setLocationRelativeTo(null); 
     gameFrame.setVisible(true); 

      int j = 0; 
      int []length = new int[64]; 
      for(j = 0; j<64; j++) { 
      length[j] = wordList[j].length();//gets length of words in wordList 
      }//end for 
      int l = 0; 
      String line = ""; 
      //create line first then put into .setText 
      for(int m = 0; m<length[l]; m++) { 
       line += "__ "; 
       l++; 
      }//end for 
      jl3.setText(line); 

      tf.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) {//when enter key pressed 
       JTextField tf = (JTextField)e.getSource(); 
      letter = tf.getText(); 
       jl2.setText(jl2.getText() + letter + " ");//sets jlabel text to users entered letter 
       }//end actionPerformed method 
      }); 
     }//end window method 
    public void print(){ 
    System.out.println(letter); 
    } 
    } 

public class GameMain { 
    public static void main(String[] args) { 
     GameStructure game = new GameStructure(); 
     game.window(); 
     game.print(); 
    } 
} 
+1

我們需要更多的代碼。另外,會發生什麼? _不working_不是我們可以合作的東西。 – Keppil

+1

你是什麼意思「它不工作」?你給它一個價值,它有另一個?您是否使用了帶有斷點的調試器? –

回答

2

要打印的東西letter前值有機會影響到它(它不會被髮送,直到被執行某種動作的值),因此它顯示爲null

+0

有沒有一種方法可以將打印語句放在其他地方?當我在print方法中對字母進行操作時,出現nullPointerException錯誤。 – Anon

+1

你爲什麼不把它放在'actionPerformed()'方法中? – Keppil

相關問題