Приложение представляет собой небольшую шахматную игру.В моих классах моделирования у меня есть класс доски с массивом квадратов [8] [8].
Теперь, что я сделал, чтобы нарисовать квадраты (я не привык создавать графические интерфейсы, поэтому он может быть полностьюнеправильно) было то, что я перебрал массив с двумя циклами for, как показано ниже:
(это класс, который рисует доску)
class Drawboard extends JComponent{
Board board;
public Drawboard(){
repaint();
}
public void paint(Graphics g){
for(int i = 0; i < 8; i++){
for(int j = 0; j < 8; j++){
int heigth = 20, width = 20;
g.setColor(board.getSquare(i, j).getColour());
g.drawRect(i*width, j*heigth, width, heigth);
g.fillRect(i*width, j*heigth, width, heigth);
}
}
}
}
Переменная 'board' является ссылочной переменнойк экземпляру Board в моем классе Game (если вы так ссылаетесь на другие классы)
(... и это метод, который добавляет нарисованную доску в JPanel в моем классе основного вида)
public void drawBoard(){
gamePanel.add(new Drawboard());
}
Это плохое кодирование?
Я добавил свой класс основного вида в качестве объекта в свой класс Game, класс основного вида - тот, который имеет метод drawBoard ().Но когда я пытаюсь запустить приложение, оно дает мне это в консоли (и сплошное серое окно):
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Drawboard.paint(Graphic.java:50)
Не уверен, почему я получаю это, как я сказал.Я не привык писать графические интерфейсы и довольно плохо знаком с программированием в целом.
Это весь основной класс представления:
import java.awt.Graphics;
import java.util.Timer;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Graphic extends JFrame {
JFrame gameWindow = new JFrame("Chess");
JPanel gamePanel = new JPanel();
JMenuBar gameMenu = new JMenuBar();
JButton newGame = new JButton("New game");
JButton pauseGame = new JButton("Pause");
JButton actionLog = new JButton("Action log");
Timer timer = new Timer();
Graphic(){
gameWindow.setDefaultCloseOperation(EXIT_ON_CLOSE);
gameWindow.setSize(180, 200);
gameWindow.getContentPane().add(gamePanel);
gameWindow.setVisible(true);
gamePanel.setVisible(true);
gameMenu.add(newGame);
gameMenu.add(pauseGame);
gameMenu.add(actionLog);
drawBoard();
}
public void drawBoard(){
gamePanel.add(new Drawboard());
}
}
Кроме того, если это правильный способ сделатьрисование.Как мне соединить один из квадратов, нарисованных с квадратами в моем массиве Square [] []?Очевидно, что если щелкнуть по одному квадрату, я бы хотел, чтобы что-то произошло с соответствующим квадратом в моём классе моделей.
Если я прав, как сейчас, я не смогу щелкнуть по одному квадрату, нотолько вся доска, верно?Видя, что это один компонент.
Будет ли он работать, чтобы создать компонент, представляющий просто квадрат, а затем создать массив этого компонента?например drawSquare [] [] или что-то в этом роде.
Основной "игровой" класс, который содержит доску:
public class Game {
@SuppressWarnings("unused")
public static void main(String[] args)
throws ClassNotFoundException, InstantiationException, IllegalAccessException{
Board board = new Board();
Graphic view = new Graphic();
}
}