刚开始使用Swing来解决Java中的类项目GUI。我试图绘制一个游戏板,但不是传统的游戏板。我试图再画一个parchessi board,所以每个棋盘都需要有一个特定的位置,而不是一个网格。
到目前为止,我遇到了这个问题。在paint()中,我正在尝试绘制5个矩形,奇怪的是蓝色和空的,甚至是红色并填充。但是,我得到了这个而不是一个漂亮的方格图案:
任何人都可以帮我弄明白为什么会这样做吗?
代码:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Rectangles extends JPanel {
public static void main(String[] a) {
JFrame f = new JFrame();
f.setSize(800, 800);
f.add(new Rectangles());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
public void paint(Graphics g) {
int x = 15;
int y = 15;
int w = 15;
int h = 15;
for(int i = 0; i < 5; i++){
if(i%2==0){
g.setColor(Color.RED);
g.fillRect (x, y, x+w, y+h);
}
else{
g.setColor(Color.BLUE);
g.drawRect (x, y, x+w, y+h);
}
x+=15;
System.out.println(Integer.toString(x) + ' ' + Integer.toString(y) + '|' + Integer.toString(w) + ' ' + Integer.toString(h));
}
}
}
Println语句的输出(x,y,width,height):
30 15|15 15
45 15|15 15
60 15|15 15
75 15|15 15
90 15|15 15
看起来第一张图片中有重叠,所以我修改了代码并尝试了这个:
for(int i = 0; i < 5; i++){
g.setColor(Color.BLUE);
g.drawRect (x, y, x+w, y+h);
x+=15;
}
以下是此代码所发生的情况:
为什么会有重叠?是什么原因造成的?
另外,有没有人知道制作易于修改的矩形数组的好方法?或者任何有关绘制此类董事会的好建议或工具?
答案 0 :(得分:1)
欢迎您不要破坏油漆链的原因......
在进行任何自定义绘画之前,先致电super.paint(g)
作为paint
方法的第一行。
更好的解决方案是覆盖paintComponent
而不是paint
,但仍然要确保在执行任何自定义绘画之前调用super.paintComponent
...
请查看Performing Custom Painting和Painting in AWT and Swing了解详情
接下来,开始阅读JavaDocs on Graphics#fillRect
,你会看到最后两个参数代表宽度和高度,而不是底角的x / y位置
public class Rectangles extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int x = 15;
int y = 15;
int w = 15;
int h = 15;
for (int i = 0; i < 5; i++) {
if (i % 2 == 0) {
g.setColor(Color.RED);
g.fillRect(x, y, w, h);
} else {
g.setColor(Color.BLUE);
g.drawRect(x, y, w, h);
}
x += 15;
System.out.println(Integer.toString(x) + ' ' + Integer.toString(y) + '|' + Integer.toString(w) + ' ' + Integer.toString(h));
}
}
}