2010-10-12 13 views
7

में एकाधिक लाइनों को चित्रित करना मैं एक bufferedimage पर क्षैतिज और लंबवत रेखा खींचने की कोशिश कर रहा हूं। इसे कोशिकाओं के ग्रिड की तरह दिखना चाहिए। लेकिन जब मैं कोड चलाता हूं, तो मुझे केवल दो पंक्तियां दिखाई देती हैं: बाएंतम रेखा और सबसे ऊपर की रेखा (यानी 0,0 से 0 तक की रेखा, छवि की ऊंचाई & 0,0 छवि की चौड़ाई, 0) कोड स्निपेट है :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); 
    } 

और ओवरराइड रंग विधि:

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

यह सब एक वर्ग RobotMaze कहा जाता है कि JPanel फैली है। किसी भी मदद की सराहना की है।

उत्तर

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

आह Dammit मैं! पूरे आयामों के बजाय प्रत्येक सेल चर के आकार का उपयोग करना था ... लंगड़ा प्रश्न लोगों के लिए खेद है और इसे इंगित करने के लिए धन्यवाद। – Adith

0

यदि आप i> 0 छवि सीमाओं के भीतर (imgDim.width+2)*i के परिणाम की अपेक्षा करते हैं तो आप कैसे उम्मीद करते हैं?

+0

हां मैं महसूस करते हैं कि अब ... :( – Adith

1

प्रिंट बाहर अपने निर्देशांक और आपको लगता है कि आप चौड़ाई और छवि की ऊंचाई के बाहर अंक योजना बना रहे हैं देखेंगे:

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); 
संबंधित मुद्दे