2016-04-13 14 views
0

ボードに作品を描くように見えることはできませんBoardView.java私はJavaでチェッカーゲームに取り組んでいますし、

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

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

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()); 

}

I thiこれはすべて理にかなっていますが、私がここで間違っていることはわかりません。私はそれに基づいて作品を試して設定するために私のボードのロジックを使用しています。誰かが洞察力を持っているか、私がやっていることを見ているだけなら、それは愚かな助けになると大変感謝します。

+0

'' 'PieceView'''でペイントメソッドをどこで呼び出すのですか?私はここにそれを見ない。 –

+0

私はボードをやったのと同じ方法でやろうとしていませんでした。 –

+1

これはスーパークラスのメソッドをオーバーライドしているために動作しますが、ピースビューの場合はメソッドのシグネチャが間違っているため、メソッドが呼び出されません。 '' checkersBoard'''を引数として使うことはできません。ヒント:メソッドをオーバーライドしていることを確認するには、 '' @ Override'''アノテーションを使用する必要があります。 –

答えて

1

PieceViewpaintメソッドは、paintメソッドを正しく上書きしないため、呼び出されません。 BoardViewクラスのよう

public void paint(Graphics g); 

:これはの署名を持っている必要があります。

あなたはpaintメソッドにcheckersBoardを使用する場合は、コンストラクタに渡し、あなたが塗装しているときのためにそれを救うことができる:それと

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 
    } 

    ... 
} 

あなたはpaintcheckersBoardを自由に使用することが方法。

+0

唯一のことは私のチェッカーボードのデータが別のクラスから来ていることです。私はそれを処理する方法はありますか? –

+0

@JacobBrauchlerはい、しかし、私はあなたに明確なコードの答えを与えることはできません。それの外観から、それはいくつかの再組織化を必要とするだろう。私はあなたがチェッカー盤を最初に作ってからあなたの作品を作る場所にそれを渡すので、それをコンストラクターに渡すことができます。 –

+0

よろしくお願いします。 –

関連する問題