在Java Swing中用图案填充矩形

10

我知道如何在Swing中用纯色填充矩形:

Graphics2D g2d = bi.createGraphics();
g2d.setColor(Color.RED);
g2d.fillRect(0,0,100,100);

我知道如何使用图片填充它:

BufferedImage bi;
Graphics2D g2d = bi.createGraphics();
g2d.setPaint (new Color(r, g, b));
g2d.fillRect (0, 0, bi.getWidth(), bi.getHeight());

如何使用大小为100x100的平铺图案来填充大小为950x950的矩形?

(需要使用100次平铺图案)


将所有元素按正确顺序放入数组中,然后在数组内循环。 - mKorbel
为了更快地获得帮助,请发布一个 SSCCE,即短小、可运行、可编译的示例。 - mKorbel
2
你尝试过使用TexturePaint对象吗? - Hovercraft Full Of Eels
@HovercraftFullOfEels 不,我不知道,谢谢! - Edward Ruchevits
2个回答

13

你使用setPaint是正确的。不过,你需要将它设置为一个TexturePaint对象,而不是一个颜色。

根据Java教程中的描述:

TexturePaint类的图案由一个BufferedImage类定义。要创建一个TexturePaint对象,您需要指定包含图案的图像和用于复制和锚定图案的矩形。以下图像表示此特性:example image

如果你有一个纹理的BufferedImage,可以这样创建一个TexturePaint

TexturePaint tp = new TexturePaint(myImage, new Rectangle(0, 0, 16, 16));

给定的矩形表示您想要平铺的源图像的区域。

构造函数JavaDoc在这里

然后运行。

g2d.setPaint(tp);

一切准备就绪,你可以出发了。


能否稍微随机一下位置? - wutzebaer
@wutzebaer,不是使用纹理绘画。没有“位置”的概念(可能是圆的位置);圆只是图像的一部分,会被平铺。如果您确实想要这个特定的图案,但带有随机化的圆圈,您可以通过程序绘制它:首先用背景颜色填充画布,然后填充圆行,并将其从名义位置稍微扰动。 - wchargin

3

正如 @wchargin 所说,您可以使用 TexturePaint。这是一个例子:

public class TexturePanel extends JPanel {

    private TexturePaint paint;

    public TexturePanel(BufferedImage bi) {
        super();
        this.paint = new TexturePaint(bi, new Rectangle(0, 0, bi.getWidth(), bi.getHeight()));
    }

    @Override
    protected void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        g2.setPaint(paint);
        g2.fill(new Rectangle(0, 0, getWidth(), getHeight()));
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接