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)
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é:
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.
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()));
}
}