2014-12-06 46 views
-1

我想把按钮添加到所有这些面板,所以我可以检查它们是否被点击。我对Java还是一个新手,这就是我们如何去做的。这一行给出了一个空指针,我不知道为什么

现在我正在制作一个大面板,并在其上添加48个新面板,然后在每个面板上添加按钮,以便我可以制作一个动作事件。如果我有办法检查我是否点击了面板,那么我可以做到这一点,但我不知道如何。

我在“panel [x] .add(单击[x])”;行上收到NullPointerException;“

package CatchTheMouse; 

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

public class CatchTheMouse extends JFrame implements ActionListener, MouseListener{ 
    final int ROWS = 8; 
    final int COLS = 6; 
    final int GAP = 2; 
    final int MAX_PANELS = ROWS * COLS; 
    int clicks; 
    int hits; 
    int percentage = 0; 
    int width; 
    int height; 
    int panelX; 
    int panelY; 
    int whichPanel = (int)(Math.random() * 47 + 1); 

    JButton[] click = new JButton[MAX_PANELS]; 
    JLabel grats = new JLabel(""); 
    JLabel spot = new JLabel("X"); 
    JPanel[] panel = new JPanel[MAX_PANELS]; 
    JPanel pane = new JPanel(new GridLayout(ROWS, COLS, GAP, GAP)); 
    Font xFont = new Font("Ariel", Font.BOLD, 20); 
    Font font = new Font("Ariel", Font.PLAIN, 12); 

    public CatchTheMouse() { 
     super("Catch the Mouse"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setSize(300,300); 
     add(spot); 
     spot.setFont(xFont); 
     add(grats); 
     grats.setFont(font); 
     add(pane); 
     for(int x = 0; x < MAX_PANELS; ++x) { 
      panel[x] = new JPanel(); 
      pane.add(panel[x]); 
      panel[x].setBackground(Color.RED); 
      panel[x].add(click[x]); 
      click[x].addActionListener(this); 
      click[x].setVisible(false); 
     } 
     pane.setBackground(Color.BLACK); 
     panel[whichPanel].add(spot); 
    } 

    public void mouseClicked(MouseEvent e) { 
     clicks = e.getClickCount(); 
    } 

    public void mouseEntered(MouseEvent e) { 

    } 

    public void mouseExited(MouseEvent e) { 
    } 

    public void mousePressed(MouseEvent e) { 
    } 

    public void mouseReleased(MouseEvent e) { 
    } 

    public void actionPerformed(ActionEvent e) { 
     Object src = e.getSource(); 
     if(src == click[whichPanel]) { 
      hits++; 
      grats.setText("You have made " + Integer.toString(hits) + " hits"); 
     } 
    } 

    public static void main(String[] args) { 
     CatchTheMouse frame = new CatchTheMouse(); 
     frame.setVisible(true); 
    } 
} 

回答

2

猜测,这条线:

panel[x].add(click[x]); 

你试图添加JButton的尚未构建了。在添加之前先构建它们!

click[x] = new JButton("something"); 
panel[x].add(click[x]); 

未来虽然在这里寻求帮助时,请包括所有相关信息,包括特别是引发任何异常的行。

+0

我做到了。我意识到我没有包括它,所以我编辑英寸这样说 – buckley183 2014-12-06 05:37:21

2

您在使用click[x]之前缺少click[x] = new JButton()。你在panel[x]的初始化的基础上得到了正确的结果。

for(int x = 0; x < MAX_PANELS; ++x) { 
     panel[x] = new JPanel(); 
     pane.add(panel[x]); 
     panel[x].setBackground(Color.RED);   
     click[x] = new JPanel(); // add this 
     panel[x].add(click[x]); 
     click[x].addActionListener(this); 
     click[x].setVisible(false); 
    } 
相关问题