Java 图形绘制图像双陆棋游戏

Java 图形绘制图像双陆棋游戏,java,image,swing,graphics,paintcomponent,Java,Image,Swing,Graphics,Paintcomponent,这可能是一个愚蠢的问题,但我只是一个初学者,所以请宽恕我的灵魂:)。 所以我的问题是我有一个名为game page的类,它是显示所有游戏的IFrame。 在它里面,我得到了一个叫做Board的类,其中包含一张Board的图片,它使用以下方法将自己画得很好: public void paintComponent(Graphics page) { super.paintComponent(page); page.drawImage(image, 0, 0, null); } 图像是电路板的

这可能是一个愚蠢的问题,但我只是一个初学者,所以请宽恕我的灵魂:)。 所以我的问题是我有一个名为game page的类,它是显示所有游戏的IFrame。 在它里面,我得到了一个叫做Board的类,其中包含一张Board的图片,它使用以下方法将自己画得很好:

public void paintComponent(Graphics page)
{
  super.paintComponent(page);
  page.drawImage(image, 0, 0, null);
}
图像是电路板的图像,我得到的图像如下:

image = ImageIO.read(new File("pics/board.png"));
好的,很好。 所以在电路板内部,我还得到了一个“Slot”类型的2d数组,Slot是我写的另一个类,它有一堆白色的或黑色的 这些是我写的代表黑板上黑白部分的类

因此,在Board类中有一个称为reset Board的方法,该方法将其组织到双陆棋的起始位置,以便初始化所有插槽

现在黑白片在字体图像的内部有一张图片,我得到的是这样的: pic=ImageIO.read(新文件(“pics/whitePiece.png”)

现在的问题是,在reset board内部,我从Slot类调用drawSlot方法 我想它拍不到这张照片。 我这样称呼它: 首先我称之为drawBoard: 抽油板

然后是抽绳板:

  public void drawBoard(Slot[][] board) throws IOException{
   for(int i=0;i<2;i++){
    for(int j=0;j<12;j++){
        board[i][j].drawSlot(getGraphics());
    }
   }
  }
public void drawBoard(插槽[][]板)引发IOException{

对于(int i=0;i不要在swing组件上使用
getGraphics()
。在
paintComponent()
中绘制插槽

并修改drawBoard()以使用传递的图形对象:

public void drawBoard(Graphics g, Slot[][] board) {
   for(int i=0;i<2;i++) {
       for(int j=0;j<12;j++){
           board[i][j].drawSlot(g);
       }
   }
}
public void绘图板(图形g,槽[]板){

对于(int i=0;i不要在swing组件上使用
getGraphics()
。在
paintComponent()
中绘制插槽

并修改drawBoard()以使用传递的图形对象:

public void drawBoard(Graphics g, Slot[][] board) {
   for(int i=0;i<2;i++) {
       for(int j=0;j<12;j++){
           board[i][j].drawSlot(g);
       }
   }
}
public void绘图板(图形g,槽[]板){

对于(int i=0;i1)为了更快地获得更好的帮助,请在句子开头添加一个大写字母。请在单词i中使用大写字母,以及缩写和首字母缩略词,如JEE或WAR。这使人们更容易理解和帮助。3)对代码块使用一致的逻辑缩进。代码缩进旨在帮助人们理解程序流程。4)如前所述,不要调用组件上的
getGraphics()
。5)更改
g.drawImage(pic,5,i*30,null);
g.drawImage(pic,5,i*30,this)
对于所有的图像绘制。1)为了更快地获得更好的帮助,请在句子的开头添加一个大写字母。还请在单词I的开头使用大写字母,以及缩写和首字母缩略词,如JEE或WAR。这使人们更容易理解和帮助。3)对代码块使用一致且符合逻辑的缩进e代码旨在帮助人们理解程序流程。4)如前所述,不要对组件调用
getGraphics()
。5)更改
g.drawImage(pic,5,i*30,null);
g.drawImage(pic,5,i*30,this)
用于所有图像绘制。@GiladBenYe我更新了一点答案,以便将图形正确地传递到
drawBoard()
好的,我的应用程序中的情况开始好转,我仍然需要进行定位。@GiladBenYe我更新了一点答案,以便将图形正确地传递到
drawBoard()
好的,我的应用程序开始变得更好了,我还需要定位。
public void paintComponent(Graphics page) {
    super.paintComponent(page);
    page.drawImage(image, 0, 0, null);
    drawBoard(page, board);
}
public void drawBoard(Graphics g, Slot[][] board) {
   for(int i=0;i<2;i++) {
       for(int j=0;j<12;j++){
           board[i][j].drawSlot(g);
       }
   }
}