2016-07-07 28 views
1

Ich versuche ein Raster zu zeichnen. Spalte x Zeile ist beispielsweise 5x6. Mein Problem ist, dass die Zeilenenden im Osten und Süden die angegebenen Spalten- und Zeilenwerte überschreiten. Es ist nicht groß, nur ein Millimeter vielleicht, aber immer noch nervig. Ich möchte, dass das Gitter wie ein Rechteck mit 20 Zellen aussieht. Wo ist der Fehler in meinem Code? Das Code-Snippet, das dieses fehlerhafte Raster zeichnet, ist unten. Danke!Warum überschreiten die Zeilenenden in meinem Raster die angegebene Breite und Höhe dieses Rasters?

package Main; 

import java.awt.Dimension; 

import javax.swing.JFrame; 

public class GridMain { 

    public static void main(String[] args) { 
     JFrame jframe = new JFrame(); 
     jframe.setPreferredSize(new Dimension(640, 730)); 
     jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     Mypanel mypanel = new Mypanel(5,6); 
     jframe.add(mypanel); 
     jframe.pack(); 
     jframe.setVisible(true); 
    } 
} 
package Main; 

import java.awt.Graphics; 

import javax.swing.JPanel; 

public class Mypanel extends JPanel { 
    /** 
* 
*/ 
    private static final long serialVersionUID = 1L; 
    private int height; 
    private int width; 
    private int gapBetweenPoints = 20; 
    private int gapBetweenFrameAndGrid=15; 
    public Mypanel(int columns, int rows) { 
     width = columns; 
     height = rows; 
    } 

    protected void paintComponent(Graphics g) { 
     for (int i =0 ; i < height; i++) { 
      g.drawLine(gapBetweenFrameAndGrid, i * gapBetweenPoints 
        + gapBetweenFrameAndGrid, width * gapBetweenPoints, i 
        * gapBetweenPoints + gapBetweenFrameAndGrid); 
     } 
     for (int i = 0; i < width; i++) { 
      g.drawLine(i * gapBetweenPoints + gapBetweenFrameAndGrid, 
        gapBetweenFrameAndGrid, i * gapBetweenPoints + gapBetweenFrameAndGrid, 
        height * gapBetweenPoints); 
     } 
    } 
} 
+0

lustig, wenn ich subtrahieren 5 aus (Breite * gapBetweenPoints) in der ersten for-Schleife und aus (Höhe * gapBetweenPoints) in der zweiten Schleife i erhalten das Ergebnis, das ich will .. aber das ist natürlich nicht, wie wir Dinge tun :-) – melar

Antwort

2

Seien Sie vorsichtig, wo Sie Ihren Ausgangspunkt haben; und ich werde nicht zur Breite (Höhe) sondern nur Breite-1/Höhe-1 erreichen. So ist der folgende Code:

for (int i =0 ; i < height; i++) { 
     g.drawLine(gapBetweenFrameAndGrid, i * gapBetweenPoints 
       + gapBetweenFrameAndGrid, gapBetweenFrameAndGrid+(width-1) * gapBetweenPoints, i 
       * gapBetweenPoints + gapBetweenFrameAndGrid); 
    } 
    for (int i = 0; i < width; i++) { 
     g.drawLine(i * gapBetweenPoints + gapBetweenFrameAndGrid, 
       gapBetweenFrameAndGrid, i * gapBetweenPoints + gapBetweenFrameAndGrid, 
       gapBetweenFrameAndGrid+(height-1) * gapBetweenPoints); 
    } 

Im Allgemeinen

for (int i =0 ; i < height; i++) { 
     g.drawLine(startingX, i * gapBetweenPoints 
       + gapBetweenFrameAndGrid, startingX+(width-1) * gapBetweenPoints, i 
       * gapBetweenPoints + gapBetweenFrameAndGrid); 
    } 
    for (int i = 0; i < width; i++) { 
     g.drawLine(i * gapBetweenPoints + gapBetweenFrameAndGrid, 
       startingY, i * gapBetweenPoints + gapBetweenFrameAndGrid, 
       startingY+(height-1) * gapBetweenPoints); 
    } 
+0

thx viel! das löst mein Problem. Nur zur Verdeutlichung: im zweiten Code, in der ersten Schleife, warum fügen Sie nicht StartingX (i * gapBetweenPoints) hinzu, anstatt gapBetweenFrameAndGrid hinzuzufügen? Was fehlt mir? Das gleiche gilt für die zweite Schleife – melar