Я хотел бы начать с того, что это задание. Я не хочу, чтобы ложка ответа подавалась мне, но я хотел бы знать, что вызывает мои проблемы.Java: заполнение прямоугольника на сетке
В настоящее время я использую игру жизни Конвея. Щелчок по ячейке должен изменить цвет, чтобы отобразить, что ячейка переключается в живое состояние. если щелкнуть снова, он должен вернуться к цвету по умолчанию.
Когда я нажимаю в любом месте окна, программа выдает исключение Null Pointer Exception в строке 56. Застряли в этом в течение последнего дня или около того, поэтому любая помощь оценивается. Благодаря!
Heres код:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class VisibleGrid extends JPanel implements MouseListener, KeyListener{
CellGrid cellGrid;
Graphics rect;
public VisibleGrid(){
addMouseListener(this);
cellGrid = new CellGrid();
}
//Draw the grid of cells, 7px wide, 75 times to create 75x75 grid
public void paint(Graphics g){
for(int i=0; i<525;i=i+7){
for(int j = 0; j<525; j=j+7){
g.drawRect(i ,j,7,7);
}
}
}
//auxillary method called to fill in rectangles
public void paint(Graphics g, int x, int y){
g.fillRect(x, y, 7, 7);
repaint();
}
//main method, adds this JPanel to a JFrame and sets up the GUI
public static void main(String[] args){
JFrame j = new JFrame("Conway's Game of Life");
j.setLayout(new BorderLayout());
j.add(new VisibleGrid(), BorderLayout.CENTER);
JTextArea info = new JTextArea("Press S to Start, E to End");
info.setEditable(false);
j.add(info, BorderLayout.SOUTH);
j.setSize(530,565);
j.setVisible(true);
}
//these methods are to satisfy the compiler/interface
//Begin Mouse Events
public void mouseExited(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mousePressed(MouseEvent e){}
public void mouseClicked(MouseEvent e){
//fill the selected rectangle
rect.fillRect(e.getX(), e.getY(), 7,7);
repaint();
//set the corresponding cell in the grid to alive
int row = e.getY() /7;
int column = e.getX() /7;
cellGrid.getCell(row, column).setAlive(true);
}
//End Mouse Events
//These methods are to satisfy the compiler/interface
//Begin KeyEvents
public void keyReleased(KeyEvent e){}
public void keyPressed(KeyEvent e){}
public void keyTyped(KeyEvent e){}
}
Какая линия линии 56? Когда я копировал/вставлял код, это был int column = e.getX()/7; который выглядит неправильно –
i bet line 56 is _rect.fillRect (e.getX(), e.getY(), 7,7); _ –
Как говорит @guido, убедитесь, что графический объект 'rect' инициализируется или имеет действительную ссылку, прежде чем обращаться к ней. – Rupak