Добавьте метод draw (Graphics g) в класс Person, который будет использовать графику AWT для рисования представления экземпляра Person.
public void draw(Graphics g, int cellWidth, int cellHeight) {
/*
do your drawing here, look into
AWT Graphics for examples on how
to draw.
*/
}
Создайте JFrame, добавьте JPanel, переопределите метод JPanel paintComponent (), который рисует сетку, представляющую 2-мерный массив, затем пусть этот метод выполняет итерацию по всем Person в вашей матрице и вызывает метод рисования каждого из них.
// essentially the "frame" around the
// new window you will draw the GUI inside of
JFrame frame = new JFrame();
int width = 400, height = 400;
frame.setSize(width + 40, height + 60);
int cellWidth = width / cols;
int cellHeight = height / rows;
// The panel, which is the surface you will draw on
JPanel panel = new JPanel() {
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.translate(15, 10);
g.setColor(Color.black);
// drawing universo
// drawing vertical lines (column borders)
for(int i = 0; i <= cols; i++) {
int dx = (int)(i * width / (double)cols);
g.drawLine(dx, 0, dx, height);
}
// drawing horizontal lines (row borders)
for(int i = 0; i <= rows; i++) {
int dy = (int)(i * height / (double)rows);
g.drawLine(0, dy, width, dy);
}
// draw all your Person objects
for(int i = 0; i < rows; i++) {
for(int j = 0; j < cols; j++) {
// optionally pass cellWidth and cellHeight to help
// draw the Person object in the correct cell.
if(universo[i][j] != null) {
universo[i][j].draw(g, cellWidth, cellHeight);
}
}
}
}
};
// Place the panel inside of the frame
frame.add(panel);
// make the frame and its contents visible on the screen
frame.setVisible(true);
Теперь, в зависимости от того, как часто ваши объекты Person вызывали move (), я бы по-разному подходил к перерисовке JPanel.
Если это очень редко, у вас может быть метод moveAndRepaint (Person p), который по сути вызывает p.move (), а затем repaint () для экземпляра JPanel в вашем JFrame.
public void moveAndRepaint(Person person, JPanel panel) {
person.move();
panel.repaint();
}
Если это очень часто, вы можете вызвать move для всех экземпляров Person в вашей матрице, а затем один вызов для repaint () на JPanel.
public void moveAllAndRepaint(Person[][] universo, JPanel panel) {
// call move on all Person objects in the universo
for(int j = 0; j < universo.length; j++) {
for(int i = 0; i < universo[j].length; i++) {
if(universo[i][j] != null) {
universo[i][j].move();
}
}
}
// redraws everything in the panel to reflect changes in the
// Person objects
panel.repaint();
}