首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我正在用Java做一个棋盘游戏,似乎不能在棋盘上画棋子。

我正在用Java做一个棋盘游戏,似乎不能在棋盘上画棋子。
EN

Stack Overflow用户
提问于 2016-04-13 16:54:20
回答 1查看 462关注 0票数 0

BoardView.java

代码语言:javascript
运行
复制
package checkers.views;
import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class BoardView extends JPanel{
    public void paint(Graphics g){
        g.setColor(Color.DARK_GRAY);
        g.fillRect(100, 100, 400, 400); 
        for(int i = 100; i <= 400; i+=100){ 
            for(int j = 100; j <= 400; j+=100){ 
                g.setColor(Color.LIGHT_GRAY);
                g.fillRect(i, j, 50, 50); 
                } 
            }
        for(int i = 150; i <= 450; i+=100){ 
            for(int j = 150; j <= 450; j+=100){ 
                g.setColor(Color.LIGHT_GRAY);
                g.fillRect(i, j, 50, 50); 
                } 
            }

        } 
}

PiecesView.java

代码语言:javascript
运行
复制
import java.awt.Color;
import java.awt.Graphics;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import checkers.models.*;
import checkers.utilities.*;
import checkers.business_logic.*;


public class PieceView extends JPanel{
    public void paint(Graphics g, Board checkersBoard ){
        for (int row = 0; row < 8; row++) {
            for (int col = 0; col < 8; col++) {
               int color = checkersBoard.piecesGrid[row][col].getColor();
               if(color == ConstantsHolder.RED){
                  g.setColor(Color.RED);
                  g.fillOval(col, row, 60, 60);
               }
               else if(color == ConstantsHolder.BLACK){
                   g.setColor(Color.BLACK);
                   g.fillOval(col, row, 60, 60);
               }

            }

        }
    }
}

BoardViewDrawer.java

代码语言:javascript
运行
复制
import checkers.utilities.*;
import checkers.models.*;
import checkers.views.*;
import checkers.business_logic.*;

public class BoardViewDrawer {

  public static void drawBoard(){

  JFrame Board = new JFrame(); 
    Board.setSize(600,600); 
    Board.getContentPane().add(new BoardView()); 
    Board.setLocationRelativeTo(null); 
    Board.setBackground(Color.BLACK); 
    Board.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    Board.setVisible(true);
    Board.setTitle("Checkers Palooza");
    Board.setLayout(new GridLayout(8,8));
    Board.getContentPane().add(new PieceView()); 

}

我认为这一切都是有道理的,但我不确定我在这里做的不对。我正在使用我的董事会的逻辑,试图在此基础上设置各部分。如果任何人有任何洞察力或仅仅看到我正在做的事情,那就是愚蠢的帮助,我们将非常感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-13 17:16:27

paint方法在PieceView中永远不会被调用,因为它没有正确地覆盖paint方法。这需要在以下方面签字:

代码语言:javascript
运行
复制
public void paint(Graphics g);

就像在BoardView类中一样。

如果要在save方法中使用checkersBoard,可以将其传递给构造函数,并将其保存到绘图时:

代码语言:javascript
运行
复制
public class PieceView extends JPanel{

    private Board checkersBoard;

    public PieceView(Board checkersBoard) {
        this.checkersBoard = checkersBoard;
    }

    @Override // makes sure you're overriding
    public void paint(Graphics g){
        // paint code here
    }

    ...
}

这样,您就可以在checkersBoard方法中自由使用paint

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36604889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档