2014-12-06 2 views
-1

Я пытаюсь добавить кнопки для всех этих панелей, поэтому я могу проверить, не нажимаются ли они. Я все еще новичок в Java, и именно так нас научили тому, как это сделать.Эта строка дает nullpointer, и я понятия не имею, почему

Прямо сейчас я делаю большую панель и добавляю на нее 48 новых панелей, а затем добавляю кнопки на каждой из этих панелей, чтобы я мог сделать событие действия. Если у меня есть способ проверить, нажал ли я панель, тогда я мог бы это сделать, но я понятия не имею, как это сделать.

Я получаю исключение NullPointerException в строке «панель [x] .add (щелкните [x]);

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

2

Вам не хватает click[x] = new JButton() перед использованием click[x]. Вы получили это право с инициализацией 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); 
    } 
Смежные вопросы