【发布时间】:2013-12-08 10:02:38
【问题描述】:
我正在尝试使用 java 中的 fillrect 函数创建一个棋盘。代码似乎不起作用,并且只添加了框架中的第一个语句。即使我删除了 for 循环(打印 64 个正方形)并且只做 2 个 add 语句,它仍然只打印第一个。这里是代码:
import javax.swing.* ;
import java.awt.* ;
public class ChessBoard extends JFrame {
private int i;
public ChessBoard (){
setLayout(new GridLayout(8,8,0,0));
// there are 64 squares
for(i=0; i<64 ;i++){
if ((i % 2) == 0) //switches between black and white squares
add(new DrawRect("WHITE"));
else
add(new DrawRect("BLACK"));
}
}
}
class DrawRect extends JPanel{
private String ngjyra = "BLACK";
public DrawRect(String b) {
ngjyra = b ;
}
@Override
protected void paintComponent (Graphics g){
super.paintComponent(g);
if (ngjyra.equals("BLACK"))
g.setColor(Color.BLACK);
else
g.setColor(Color.WHITE);
g.fillRect(getX(), getY(), getWidth(), getHeight());
//add the square with the specified color
}
}
【问题讨论】:
-
“只添加框架中的第一个语句”是什么意思?为什么不能只为单元格的 JPanel 调用 setBackground()?
-
如果我删除循环,并制作 2 个 add 语句(由一个黑白 Rect 组成),它只会将第一个语句添加到框架中。我正在读一本书来学习 java 及其练习要求填充矩形。我想解决这个特殊问题。
-
与您的问题无关,但为什么
DrawRect不能直接持有Color?如果你绝对需要这种方式,为什么是字符串,而不是枚举或整数? -
一个好主意。感谢您提供关于那个的信息。一个 int 会简单得多。
-
@Lind an
enum会简单得多。
标签: java swing jpanel paintcomponent rectangles