2013-03-10 17 views
7

Ich weiß, wie ein Rechteck in Swing mit einer Farbe zu füllen:in Java Swing

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

Ich weiß, wie es zu füllen mit einem Bild:

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

Aber wie ein Rechteck der Größe 950x950 mit einem gekachelten Muster der Größe 100x100 zu füllen?

+0

setzen alle Elemente der Anordnung (in der richtigen Reihenfolge), dann Schleife innerhalb Array – mKorbel

+0

für bessere Hilfe früher veröffentlichen ein [SSCCE] (http://sscce.org/), kurz, runnable, compilable – mKorbel

+2

Haben Sie versucht, ein [TexturePaint] (http://docs.oracle.com/javase/7/docs/api/java/awt/TexturePaint.html) Objekt dafür zu verwenden? –

Antwort

10

Sie mit setPaint auf dem richtigen Weg sind (Musterbild sollte 100 mal verwendet werden). Anstatt es jedoch auf eine Farbe zu setzen, möchten Sie es auf ein Objekt setzen.

Von the Java tutorial:

Das Muster für eine TexturePaint Klasse wird durch eine BufferedImage Klasse definiert. Um ein TexturePaint-Objekt zu erstellen, geben Sie das Bild an, das das Muster und ein Rechteck enthält, mit dem das Muster repliziert und verankert wird. Das folgende Bild stellt diese Funktion: example image

Wenn Sie eine BufferedImage für die Textur haben, erstellen Sie ein TexturePaint wie so:

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

wo das gegebene Rechteck den Bereich des Ausgangsbildes darstellt, die Sie wollen kacheln.

Der Konstruktor JavaDoc ist here.

Dann laufen

g2d.setPaint(tp); 

und du bist gut zu gehen.

+0

Ja, dies sollte das Problem des OP lösen. 1+ –

+0

Vielen Dank! –

+0

Für [Beispiel] (http://stackoverflow.com/a/11556441/230513). – trashgod

2

Wie @wchargin sagte, können Sie TexturePaint verwenden. Hier ein Beispiel:

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