该应用程序是一款小型国际象棋游戏。在我的建模类中,我有一个具有[8] [8]正方形阵列的板类。
现在我所做的是绘制正方形(我不习惯创建GUI,因此它可能完全错误)是我通过两个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'变量是我的Game类中Board实例的引用变量(如果这是你引用其他类的方式)
(...这是将绘制的板添加到主视图类中的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)
我不知道为什么会这样,就像我说的那样。我不习惯编写GUI,也不习惯整体编程。
这是迄今为止的整个主视图类:
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();
}
}
答案 0 :(得分:1)
我还没有看完整个问题,但问题似乎在这里
class Drawboard extends JComponent{
Board board;//un initilized
.
..
.
public void paint(Graphics g){
.
.
g.setColor(board.getSquare(i, j).getColour());//trying to invoke method on null
}
}
}
}
使其像
class Drawboard extends JComponent{
Board board;//un initilized
public Drawboard() {
board = new Board();
}
.
..
.
public void paint(Graphics g){
.
.
g.setColor(board.getSquare(i, j).getColour());//trying to invoke method on null
}
}
}
}