在 Java Swing 中用图案填充矩形

Posted

技术标签:

【中文标题】在 Java Swing 中用图案填充矩形【英文标题】:Fill rectangle with pattern in Java Swing 【发布时间】:2013-02-25 23:00:30 【问题描述】:

我知道如何用纯色填充 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 次)

【问题讨论】:

将每个元素放入数组中(按正确的顺序),然​​后在数组中循环 为了更好的帮助,请尽快发布SSCCE,简短、可运行、可编译 您是否尝试过为此使用TexturePaint 对象? @HovercraftFullOfEels 不,我不知道,谢谢! 【参考方案1】:

setPaint 让您走在正确的轨道上。但是,您不想将其设置为颜色,而是将其设置为 TexturePaint 对象。

来自the Java tutorial:

TexturePaint 类的模式由 BufferedImage 类定义。要创建 TexturePaint 对象,您需要指定包含图案的图像和用于复制和锚定图案的矩形。下图表示此功能:

如果你有一个 BufferedImage 纹理,创建一个 TexturePaint 像这样:

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

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

构造函数JavaDoc是here。

然后,运行

g2d.setPaint(tp);

你可以走了。

【讨论】:

是否可以将位置随机化一点? @wutzebaer 没有纹理涂料,没有。没有“位置”的概念(大概是圆圈);圆圈只是图像的一部分,它被平铺了。如果您确实想要这种特定的图案但带有随机圆圈,您可以按程序绘制它:首先用背景颜色填充画布,然后填充圆圈行,并从标称位置稍微扰动它们。【参考方案2】:

正如@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()));
    

【讨论】:

以上是关于在 Java Swing 中用图案填充矩形的主要内容,如果未能解决你的问题,请参考以下文章

java swing实现动态心形图案的代码下载

origin填充图案导出pdf有问题

如何将值传递给paint方法

CAD中图案填充怎么设间距

CAD如何自定义填充图案

CAD参数绘制图案填充(网页版)