2014-12-02 42 views
2
for(gbc.gridy = 3; gbc.gridy > 0; gbc.gridy--) 
     for(gbc.gridx = 0; gbc.gridx < 3;gbc.gridx++) 
      { 
      grid[btnNum] = new JButton("" + (btnNum+1)); 
      grid[btnNum].setPreferredSize(new Dimension(75,75)); 
      frame.add(grid[btnNum], gbc); 
      grid[btnNum].addActionListener(this); 
      grid[btnNum].addKeyListener(this); 
      btnNum++; 
      } 

我有一个按钮的数组显示在3x3网格中,每个都有一个动作侦听器。JButton数组ActionListener值

public void actionPerformed(ActionEvent e){ 
     String output = ""; 
     if(e.getSource() == grid[0]){ 
      System.out.println("button 1"); 
     } 
} 

这是不正确的?在上下文中

完整的示例:

public class ButtonGrid implements ActionListener, KeyListener{ 

    JFrame frame=new JFrame(); //creates frame 
    JButton[] grid; //names the grid of buttons 




    public ButtonGrid(){ //constructor 
      frame.setTitle("MPC"); 
      frame.setLayout(new GridBagLayout()); //set layout 
      JButton[] grid=new JButton[12]; //allocate the size of grid 

      GridBagConstraints gbc = new GridBagConstraints(); 
      gbc.gridx = 0; 
      gbc.gridy = 0; 
      int btnNum = 0; 

      grid[9] = new JButton("0"); 
      grid[9].setPreferredSize(new Dimension(75,75)); 
      grid[10] = new JButton("-"); 
      grid[10].setPreferredSize(new Dimension(75,75)); 
      grid[11] = new JButton("="); 
      grid[11].setPreferredSize(new Dimension(75,75)); 
      frame.add(grid[9], gbc); 
      gbc.gridx++; 
      frame.add(grid[10], gbc); 
      gbc.gridx++; 
      frame.add(grid[11], gbc); 

      for(gbc.gridy = 3; gbc.gridy > 0; gbc.gridy--) 
       for(gbc.gridx = 0; gbc.gridx < 3;gbc.gridx++){ 
        grid[btnNum] = new JButton("" + (btnNum+1)); 
        grid[btnNum].setPreferredSize(new Dimension(75,75)); 
        frame.add(grid[btnNum], gbc); 
        grid[btnNum].addActionListener(this); 
        grid[btnNum].addKeyListener(this); 
        btnNum++; 
       } 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.pack(); //sets appropriate size for frame 
      frame.setVisible(true); //makes frame visible 
} 
public static void main(String[] args) { 

     new ButtonGrid();//makes new ButtonGrid with 2 parameters 


    } 
public void actionPerformed(ActionEvent e){ 
     String output = ""; 
     if(e.getSource() == grid[0]){ 
      System.out.println("button one"); 
      //playSound(abc.kick); 
     }} 

回答

6

您的网格变量在ActionListener中为null。我的赌注 - 你正在影响变量。

解决方案:确保你初始化电网领域,而不是一个局部电网变量

public class ButtonGrid implements ActionListener, KeyListener{ 

    JFrame frame=new JFrame(); 
    JButton[] grid; // grid field remains null 

    public ButtonGrid(){ 
      frame.setTitle("MPC"); 
      frame.setLayout(new GridBagLayout()); 
      JButton[] grid=new JButton[12]; // ****** a LOCAL variable ****** 

在创建阴影变量指定的行。这意味着因为您在构造函数中重新声明了网格,所以只初始化局部变量,而不是初始化在类中声明的字段,将字段留空。解决方案:不要重新声明网格。将其更改为:

public class ButtonGrid implements ActionListener, KeyListener{ 

    JFrame frame = new JFrame(); 
    JButton[] grid; 

    public ButtonGrid(){ 
      frame.setTitle("MPC"); 
      frame.setLayout(new GridBagLayout()); 
      grid = new JButton[12]; // ***** this initializes the field ****** 
2

试试这个。

public void actionPerformed(ActionEvent e){ 
     String output = ""; 
    for(int i=0; i<=grid.length; i++){ 
     if(e.getSource() == grid[i]){ 
      System.out.println("button "+i); 
     } 
    } 
} 
+0

我也得到了与此相同的错误。基本上是一个错误列表(Unknown Source) – user3562657 2014-12-02 03:20:42

+1

@ user3562657你得到的错误信息是什么? – 2014-12-02 03:31:01

+1

@KickButtowski:宾果 - AWT - EventQueue的 - 0一些关键失踪情报 – 2014-12-02 03:32:22

相关问题