gpt4 book ai didi

java - 如何在paintComponent中自动添加形状?

转载 作者:行者123 更新时间:2023-12-04 06:15:56 24 4
gpt4 key购买 nike

作为初学者,每当我想在框架内添加图形形状时,我都会这样做:

public void paintComponent(Graphics g) {
super.paintComponent(g);
g.fillRect(0, 0, 10, 10);
g.fillOval(10,10,10,10);
}

如何在框架内自动绘制无限数量的形状?如果我按照我上面做的方式,我只有有限数量的形状(矩形,椭圆形,没有别的)。

我正在寻找不同的东西,例如,每当一个方法 addStuff(x, y)已调用,它会在坐标 x 和 y 处自动绘制“东西”,而无需在 paintComponent 中编辑任何内容再次手动。

我曾经用 acm 包来做这件事,这很容易。就像下面的代码一样。
for (int i = 0; i < NCIRCLES; i++) {
double r = rgen.nextDouble(MIN_RADIUS, MAX_RADIUS);
double x = rgen.nextDouble(0, getWidth() - 2 * r);
double y = rgen.nextDouble(0, getHeight() - 2 * r);
GOval circle = new GOval(x, y, 2 * r, 2 * r);
circle.setFilled(true);
circle.setColor(rgen.nextColor());
add(circle);
}

正如您在上面看到的,我可以添加任意数量的圆圈,我知道解释这一点可能需要几页纸,但我只想简要说明如何在不依赖 acm 包的情况下创建类似于上述代码的内容。

最佳答案

我会使用抽象类来定义这种行为。

abstract class OpalDraw {
protected int x1, y1, x2, y2;
protected OpalDraw(int x1, int y1, int x2, int y2) {
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}
abstract public void draw(Graphics g);
}

class OpalOval {
public OpalOval(int x1, int y1, int x2, int y2) { super(x1,y1,x2,y1); }
public void draw(Graphics g) {
g.drawOval(x1,y1,x2,y1);
}
}

class OpalRect {
public OpalRect(int x1, int y1, int x2, int y2) { super(x1,y1,x2,y1); }
public void draw(Graphics g) {
g.drawRect(x1,y1,x2,y1);
}
}

然后在您的绘画容器中,您可以拥有
addOval(int x1, int y1, int x2, int y2) {
myDraws.add(new OpalOval(x1,x2,y1,y2);
}

addRect(int x1, int y1, int x2, int y2) {
myDraws.add(new OpalRect(x1,x2,y1,y2);
}

然后在里面 paintComponent(Graphics)你可以
for(OpalDraw draw : myDraws) draw.draw(g);

关于java - 如何在paintComponent中自动添加形状?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7246871/

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