gpt4 book ai didi

java - Swing 库中的绘制矩形/填充矩形问题(包括图像)

转载 作者:行者123 更新时间:2023-12-01 12:18:44 25 4
gpt4 key购买 nike

刚刚开始在 Java 中使用 Swing 来构建一个类项目 GUI。然而,我正在尝试绘制一个游戏板,而不是传统的游戏板。我正在尝试再画一个像 parchessi board ,因此每个棋盘图 block 需要有一个特定的位置而不是网格。

到目前为止,我遇到了这个问题。在paint()中,我尝试绘制5个矩形,奇数矩形为蓝色且空,偶数矩形为红色并填充。但是,我得到的不是漂亮的方格图案,而是:

enter image description here

谁能帮我弄清楚为什么这样做?

代码:

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,宽度,高度):

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;
}

以下是此代码发生的情况:

enter image description here

为什么会有重叠?是什么原因造成的?

另外,有谁知道制作易于修改的矩形数组的好方法吗?或者有什么好的建议或工具来绘制这种类型的板吗?

最佳答案

欢迎了解不应破坏油漆链的原因...

在进行任何自定义绘制之前,首先调用 super.paint(g) 作为 paint 方法的第一行。

更好的解决方案是重写 paintComponent 而不是 paint,但仍然确保在执行任何自定义之前调用 super.paintComponent绘画...

看看Performing Custom PaintingPainting 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));
}
}
}

关于java - Swing 库中的绘制矩形/填充矩形问题(包括图像),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26836283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com