2010-10-12 47 views
7

Tôi đang cố gắng vẽ các đường ngang và dọc trên một vùng đệm. Nó sẽ kết thúc trông giống như một mạng lưới các tế bào. Nhưng khi tôi chạy mã, tôi chỉ thấy hai dòng: dòng ngoài cùng bên trái và dòng trên cùng (ví dụ: một dòng từ 0,0 đến 0, chiều cao của hình ảnh & 0,0 đến chiều rộng của hình ảnh, 0) Heres đoạn mã :Vẽ nhiều đường kẻ trong một BufferedImage

BufferedImage mazeImage = new BufferedImage(imgDim.width, imgDim.height, BufferedImage.TYPE_INT_RGB); 
    Graphics2D g2d = mazeImage.createGraphics(); 
    g2d.setBackground(Color.WHITE); 
    g2d.fillRect(0, 0, imgDim.width, imgDim.height); 
    g2d.setColor(Color.BLACK); 
    BasicStroke bs = new BasicStroke(2); 
    g2d.setStroke(bs); 
    // draw the black vertical and horizontal lines 
    for(int i=0;i<21;i++){ 
    g2d.drawLine((imgDim.width+2)*i, 0, (imgDim.width+2)*i, imgDim.height-1); 
    g2d.drawLine(0, (imgDim.height+2)*i, imgDim.width-1, (imgDim.height+2)*i); 
    } 

Và phương pháp sơn overriden:

public void paint(Graphics g) { 
    g.drawImage(mazeImage, 0, 0, this); 
} 

Đây là tất cả trong một lớp được gọi là RobotMaze kéo dài JPanel. Bất kỳ trợ giúp được đánh giá cao.

Trả lời

8
import java.awt.*; 
import java.awt.image.*; 
import javax.swing.*; 

class GridLines { 

    public static void main(String[] args) { 

     Dimension imgDim = new Dimension(200,200); 
     BufferedImage mazeImage = new BufferedImage(imgDim.width, imgDim.height, BufferedImage.TYPE_INT_RGB); 


     Graphics2D g2d = mazeImage.createGraphics(); 
     g2d.setBackground(Color.WHITE); 
     g2d.fillRect(0, 0, imgDim.width, imgDim.height); 
     g2d.setColor(Color.BLACK); 
     BasicStroke bs = new BasicStroke(2); 
     g2d.setStroke(bs); 
     // draw the black vertical and horizontal lines 
     for(int i=0;i<21;i++){ 
      // unless divided by some factor, these lines were being 
      // drawn outside the bound of the image.. 
      g2d.drawLine((imgDim.width+2)/20*i, 0, (imgDim.width+2)/20*i,imgDim.height-1); 
      g2d.drawLine(0, (imgDim.height+2)/20*i, imgDim.width-1, (imgDim.height+2)/20*i); 
     } 

     ImageIcon ii = new ImageIcon(mazeImage); 
     JOptionPane.showMessageDialog(null, ii); 
    } 
} 
+0

Ah Chết tiệt tôi! được cho là sử dụng kích thước của mỗi biến tế bào thay vì toàn bộ kích thước ... Xin lỗi vì những kẻ hỏi lame và cảm ơn vì đã chỉ ra điều này. – Adith

0

Làm cách nào để bạn mong đợi kết quả của (imgDim.width+2)*i nằm trong ranh giới hình ảnh nếu i> 0?

+0

vâng tôi nhận ra rằng bây giờ ... :( – Adith

1

In ra tọa độ của bạn và bạn sẽ thấy rằng bạn đang vẽ điểm bên ngoài chiều rộng và chiều cao của hình ảnh:

System.out.printf("Vertical: (%d,%d)->(%d,%d)\n",(imgDim.width+2)*i, 0, (imgDim.width+2)*i, imgDim.height-1); 
System.out.printf("Horizontal: (%d,%d)->(%d,%d)\n",0, (imgDim.height+2)*i, imgDim.width-1, (imgDim.height+2)*i); 
Các vấn đề liên quan