试图让棋盘(Trying to make checkerboard)

2019-10-29 02:28发布

我试图做给从我采取了CS类模板的棋盘。 然而,当我运行它,没有出现在屏幕上。 我猜我缺少一些代码来实际绘制正方形到屏幕上,但我已经尝试了很多东西,仍然一无所获。

   import java.applet.Applet;
   import java.awt.*;
   import java.util.Random;
   import java.awt.*;
   import java.awt.event.*;
   import javax.swing.*;
   import javax.swing.event.*;


   public class Checkers extends JApplet
   {
   private final int MAX_SIZE = 8; 
   private final int APP_WIDTH = 400;
   private final int APP_HEIGHT = 400;
   private final int MAXSIZE = 8;


   Square[][] sq;

   public void paint(Graphics page)
    {

    setBackground(Color.white);
    fillBoard(page); // draws the method that will draw the checkers
    setSize (APP_WIDTH,APP_HEIGHT);

    }

    public void fillBoard(Graphics page)
    {  
       sq = new Square[8][8];

       int x,y;
       Color rb;

       for (int row = 0; row < MAXSIZE; row++)
         for (int col = 0; col < MAXSIZE; col++)
         {
            x = row * (APP_WIDTH/MAXSIZE);
            y = col * (APP_HEIGHT/MAXSIZE);
            if ( (row % 2) == (col % 2) )
               rb = Color.red;
            else
               rb = Color.blue;
            sq[row][col] = new Square (x, y, rb);  
         }
   }

   class Square 
   {


    private int x, y = 0;  
    private Color c;
    private boolean occupied;
    private Color checkerColor;


    public Square (int x, int y, Color c)
    {
      this.x = x;
      this.y = y;
      this.c = c;
    }

    public void setX (int x)
    {
      x = this.x;
    }

    public int getX ()
    {
      return x;
    }

    public void setY (int y)
    {
      y= this.y;
    }

    public int getY ()
    {
      return y;
    }

    public void setColor (Color c)
    {
      c = this.c;
    }

    public Color getColor ()
    {
      return c;
    }

    public void setOccupy (boolean occupied)
    {
      occupied = this.occupied;
    }

    public boolean getOccupy ()
    {
      return occupied;
    }

    public void setCheckerColor (Color c)
    {
      checkerColor = this.checkerColor;
    }

    public Color getCheckerColor ()
    {
      return checkerColor;
    }

    public String toString()
    {
      return ("X coordinate: " + x + "\nY coordinate:" + y + "\nSquare color: " + c);
    }


   public void draw (Graphics page)
    {
         page.setColor(c);
         page.fillRect(x, y, 50, 50);
    }

Answer 1:

你永远不会调用Square#draw

话虽如此,我会警惕调用fillBoard每次时间paint方法被调用,其实我会鼓励你覆盖paint摆在首位。

我可能做的是检查是否sqnullfillBoard ,只产生了数组,那么。 早在paint方法,我会简单地用一个复合环路和draw每平方米。

相反,覆盖的paintJApplet ,你应该像开始JPanel ,并覆盖它paintComponent方法,请确保调用super.paintComponent

有许多你应该这样做的原因,但这里的主要原因之一是JApplet不是双缓冲,这意味着你会得到“闪烁”,如图更新。 JPanel是双默认情况下缓冲,为您节省了大量的工作,并为实现自己的解决方案的时间...

一旦你做到了这一点,采取自定义面板并将其添加到该小程序。

我把所有的绘画逻辑吧。 看看演出风俗绘画更多细节



Answer 2:

那么据我可以看到,除非我错过了什么,你从来没有真正被称为重绘或油漆或绘制方法。 此代码设置不同于我所见过的大多数其他代码试图完成类似的任务,我不觉得自己真的要搞清楚这一切,但你必须实际调用绘制图像的方法。 但是,请确保您密切注意的地方调用此方法,因为它正确地放置它,否则它可能无法正常发挥其功能是相当重要的。



文章来源: Trying to make checkerboard