在Java Swing中用模式填充矩形

时间:2013-03-10 20:30:16

标签: java swing graphics 2d design-patterns

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

2 个答案:

答案 0 :(得分:12)

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

来自the Java tutorial

  

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

如果纹理有BufferedImage,请像这样创建TexturePaint

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

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

构造函数JavaDoc是here

然后,运行

g2d.setPaint(tp);

你很高兴。

答案 1 :(得分: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()));
    }
}