我正在尝试从我参加的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);
}
您永远不会致电Square#draw
。
话虽如此,我对每次调用paint
方法都会打电话给fillBoard
感到谨慎,实际上,我首先会阻止您覆盖paint
。
我可能要做的就是检查sq
是否是fillBoard
中的null
,然后仅生成数组。返回油漆方法,我只需使用一个复合循环和每个正方形的draw
。
您应该从JPanel
之类的东西开始,而不是覆盖CC_1的paint
,它是paintComponent
方法,请确保致电super.paintComponent
!
您应该这样做的原因有很多,但是这里的主要原因是JApplet
不是双重缓冲,这意味着您会在更新图纸时获得"闪光灯"。JPanel
默认情况下是双重缓冲的,为您节省了很多工作和时间必须实现自己的解决方案...
完成此操作后,将自定义面板添加到小程序中。
我会将所有绘画逻辑移到它上。看看表演自定义绘画以获取更多详细信息
据我所知,除非我错过了您从未真正称为重新粉刷,油漆或绘画方法的东西。该代码的设置与我所看到的大多数其他试图完成类似任务的代码不同,我真的不想弄清楚所有这些代码,但是您必须实际调用该方法来绘制图像。但是,请确保您密切关注您调用此方法的位置,因为正确放置它很重要,否则可能无法正确使用其功能。