2012-04-08 5 views
0

Das Raster sieht so aus. http://a4.sphotos.ak.fbcdn.net/hphotos-ak-prn1/s320x320/532063_426018057411895_100000111130260_1879195_1266764275_n.jpgBreaking Lines vom Raster

Ich habe die if-Anweisung in die Schleife eingefügt, um die Linien zu zeichnen, um einen Zeilenumbruch zu machen. Das Programm funktioniert jedoch so, als ob die if-Anweisung nicht vorhanden wäre. Ist die if-Anweisung nicht genug?

import java.awt.*; 
import java.awt.Color; 
import java.awt.Component; 
import java.awt.Graphics; 
import javax.swing.*; 

public class Grid extends Canvas{ 

    Cell[][] maze; 
    int rows; 
    int cols; 
    int pathSize; 
    double width, height; 


    public Grid(int rows, int cols, int h, int w) { 
     this.rows = rows; 
     this.cols = cols; 
     maze = new Cell[rows][cols]; 
     setPreferredSize(new Dimension(h,w)); 
    } 


    public static void main(String[] args){ 
    JFrame y = new JFrame(); 
    y.setLayout(new BorderLayout()); 
    Grid f = new Grid(25,25,400,400); 
    y.add(f, BorderLayout.CENTER); 
    y.setSize(450,450); 
    y.setVisible(true); 
    y.setDefaultCloseOperation(y.EXIT_ON_CLOSE); 

    } 
    public void paint(Graphics g) { 
     int k,j,z=0; 
     width = getSize().width; 
     height = getSize().height; 

     double htOfRow = height/(rows); 
     for (k = 0; k < rows; k++) 
      for(j=0; j< rows+1; j++){ 
      if(j!=3){ 
      g.drawLine(z, (int) (k * htOfRow) , (int) (j*(width/rows)) , (int) (k * htOfRow)); 
      z=(int)(j*(width/rows)); 
      }} 
     double wdOfRow = width/(cols); 
     for (k = 0; k < cols; k++) 
      for(j=0; j< cols+1; j++){ 
      if(j!=3){ 
      g.drawLine((int) (k*wdOfRow) , z,(int) (k*wdOfRow) , (int) (j*(height/cols))); 
      z=(int)(j*(height/cols));}} 
     } 
} 

class Cell{} 
+0

Der Code, den Sie auskommentiert haben, scheint das Gitter auf die gleiche Weise wie der erste Link in Ihrer Frage zu malen. Ich bin mir nicht sicher, ob ich verstehe, was Sie fragen. – assylias

+0

@assylias - bearbeitet die Frage und Code –

Antwort

1

Sie hatten einige Logikfehler in Ihren Zeichnungsschleifen. Ich denke, das sollte funktionieren:

import java.awt.*; 
import java.awt.Color; 
import java.awt.Component; 
import java.awt.Graphics; 
import javax.swing.*; 

public class Grid extends Canvas { 

    Cell[][] maze; 
    int rows; 
    int cols; 
    int pathSize; 
    double width, height; 

    public Grid(int rows, int cols, int h, int w) { 
     this.rows = rows; 
     this.cols = cols; 
     maze = new Cell[rows][cols]; 
     setPreferredSize(new Dimension(h, w)); 
    } 

    public static void main(String[] args) { 
     JFrame y = new JFrame(); 
     y.setLayout(new BorderLayout()); 
     Grid f = new Grid(40, 25, 400, 400); 
     y.add(f, BorderLayout.CENTER); 
     y.setSize(450, 450); 
     y.setVisible(true); 

    } 

    public void paint(Graphics g) { 
     int k, j, z = 0; 
     width = getSize().width; 
     height = getSize().height; 

     double htOfRow = height/(rows); 
     double wdOfRow = width/(cols); 

     for (j = 0; j < rows; j++) { 
      for (k = 0; k < cols; k++) { 
       g.drawLine((int) (k * wdOfRow), (int) (j * htOfRow), (int) (k * wdOfRow), (int) ((j+1) * htOfRow)); 
      } 
     } 
     for (j = 0; j < rows; j++) { 
      for (k = 0; k < cols; k++) { 
       g.drawLine((int) (k * wdOfRow), (int) (j * htOfRow), (int) ((k+1) * wdOfRow), (int) (j * htOfRow)); 
      } 
     } 
    } 

    class Cell { 
    } 
} 
+0

versuchte diesen Code mit if (k! = 3 || j! = 3) für mein neues Problem und es hat funktioniert. vielen Dank. Ich sehe, dass Sie die Argumente geändert haben, die ich an drawLine() übergeben habe. Also ist der Startpunkt (0,0) dann (0,1)? So, jetzt verstehe ich es. –

+0

Ihr Code scheint nicht zu funktionieren, wenn die Rastergröße nicht die gleiche ist: D –

+0

@Dan Joseph Porcioncula Sie haben Recht, meine 'j' und' k' Indizes wurden umgedreht. Bearbeitete die Antwort, um es zu beheben. – ulmangt