2013-03-10 42 views
7

tôi biết làm thế nào để điền vào một hình chữ nhật trong Swing với một màu rắn:Điền hình chữ nhật với mô hình trong Java Swing

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

tôi biết làm thế nào để điền vào nó với một hình ảnh:

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

Nhưng làm thế nào để điền hình chữ nhật có kích thước 950x950 với một số mẫu lát có kích thước 100x100?

(mô hình hình ảnh nên được sử dụng 100 lần)

+0

đặt tất cả các yếu tố để các mảng (trong trật tự chính xác), sau đó vòng lặp bên trong mảng – mKorbel

+0

để được giúp đỡ tốt hơn sớm gửi một [SSCCE] (http://sscce.org/), ngắn, runnable, compilable – mKorbel

+2

Bạn đã thử sử dụng đối tượng [TexturePaint] (http://docs.oracle.com/javase/7/docs/api/java/awt/TexturePaint.html) cho điều này chưa? –

Trả lời

10

Bạn đang đi đúng với setPaint. Tuy nhiên, thay vì đặt nó thành màu, bạn muốn đặt nó thành đối tượng TexturePaint.

Từ the Java tutorial:

Các mô hình cho một lớp TexturePaint được xác định bởi một lớp BufferedImage. Để tạo một đối tượng TexturePaint, bạn chỉ định hình ảnh có chứa mẫu và hình chữ nhật được sử dụng để nhân rộng và neo mẫu đó. Những hình ảnh sau đây đại diện cho tính năng này: example image

Nếu bạn có một BufferedImage cho kết cấu, tạo ra một TexturePaint như vậy:

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

nơi hình chữ nhật nhất định thể hiện diện tích của hình ảnh nguồn mà bạn muốn Để ngói.

Hàm tạo JavaDoc là here.

Sau đó, chạy

g2d.setPaint(tp); 

và bạn tốt để đi.

+0

Có, điều này sẽ giải quyết vấn đề của OP. 1+ –

+0

Cảm ơn bạn rất nhiều! –

+0

Đối với [ví dụ] (http://stackoverflow.com/a/11556441/230513). – trashgod

2

Như @wchargin đã nói, bạn có thể sử dụng TexturePaint. Dưới đây là một ví dụ:

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())); 
    } 
} 
Các vấn đề liên quan