在 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 中用图案填充矩形的主要内容,如果未能解决你的问题,请参考以下文章