2013-03-10 17 views
7

wiem jak wypełnić prostokąt w Swing z kolorem:Wypełnij prostokąt wzorkiem w Java Swing

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

wiem jak wypełnić go z obrazem:

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

Ale jak wypełnić prostokąt o wymiarach 950x950 za pomocą jakiegoś kafelkowego wzoru o rozmiarze 100x100?

(wzór obraz powinien być używany 100 razy)

+0

umieścić co elementy do tablicy (w odpowiedniej kolejności), a wewnątrz pętli tablicy – mKorbel

+0

lepszego pomocą wcześniej umieścić w [SSCCE] (http://sscce.org/), krótkie programowany, kompilowalny – mKorbel

+2

Czy próbowałeś użyć do tego obiektu [TexturePaint] (http://docs.oracle.com/javase/7/docs/api/java/awt/TexturePaint.html)? –

Odpowiedz

10

Jesteś na dobrej drodze z setPaint. Jednak zamiast ustawić go na kolor, chcesz ustawić go na obiekt TexturePaint.

Od the Java tutorial:

Wzór dla klasy TexturePaint jest zdefiniowana przez klasę BufferedImage. Aby utworzyć obiekt TexturePaint, należy określić obraz, który zawiera wzorzec i prostokąt, który jest używany do replikowania i zakotwiczenia wzoru. Poniższy rysunek przedstawia tę funkcję: example image

Jeśli masz BufferedImage na fakturze, stworzyć TexturePaint tak:

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

gdzie dany prostokąt reprezentuje obszar obrazu źródłowego, który chcesz układać.

Konstruktor JavaDoc to here.

Następnie uruchom

g2d.setPaint(tp); 

i jesteś dobry, aby przejść.

+0

Tak, powinno to rozwiązać problem PO. 1+ –

+0

Dziękuję bardzo! –

+0

Dla [przykład] (http://stackoverflow.com/a/11556441/230513). – trashgod

2

Jako @wchargin powiedział, możesz użyć TexturePaint. Oto przykład:

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