【问题标题】:Fill rectangle with pattern in Java Swing在 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 不,我不知道,谢谢!

标签: java swing graphics 2d design-patterns


【解决方案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()));
    }
}

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 2012-10-19
    • 2014-09-08
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    相关资源
    最近更新 更多