Remplir le rectangle avec un motif en Java Swing


Je sais comment remplir un rectangle en Swing avec une couleur unie:

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

Je sais comment le remplir avec une image:

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

Mais comment remplir un rectangle de taille 950x950 avec un motif carrelé de taille 100x100?

(l'image du motif doit être utilisée 100 fois)

Author: Edward Ruchevits, 2013-03-11

2 answers

, Vous êtes sur la bonne voie avec setPaint. Cependant, au lieu de définir une couleur, vous voulez en faire un TexturePaint objet.

De le tutoriel Java :

Le motif d'une classe TexturePaint est défini par une classe BufferedImage. Pour créer un objet TexturePaint, vous spécifiez l'image qui contient le motif et un rectangle qui est utilisé pour répliquer et ancrer le motif. L'image suivante représente cette fonctionnalité: exemple d'image

Si vous avez un BufferedImage pour la texture, de créer un TexturePaint comme ceci:

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

Où le rectangle donné représente la zone de l'image source que vous souhaitez carreler.

Le constructeur JavaDoc est ici.

Puis, exécutez

g2d.setPaint(tp);

Et vous êtes prêt à partir.

 10
Author: wchargin, 2017-01-20 13:58:49

Comme l'a dit @wchargin, vous pouvez utiliser TexturePaint. Voici un exemple:

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()));
    }
}
 2
Author: IvanRF, 2017-02-17 15:30:27