Gitternetz richtig darstellen

3njoyeD

Mitglied
Guten Abend,

mich wurmt es nun schon seit mehreren Stunden.

Ich bekomme ein Gitternetz in einem Diagramm nicht richtig dargestellt.

Es handelt sich um diese Methode:
Java:
private void drawPattern(Graphics g){
        int i = 0;       
            while ((i + OFFSET < this.getWidth() - OFFSET || i + OFFSET < this.getHeight() - OFFSET ) ) {
               
                if (twoQuadrantSystem){   
                    // Zeichne Senkrechte Linien alle 45°
                    g.drawLine(OFFSET + i, OFFSET , OFFSET +i, this.getHeight() - OFFSET);
                    // Zeichne Waagerechte Linien alle 45°
                    g.drawLine(OFFSET, this.getHeight()/2 + i, this.getWidth() - OFFSET, this.getHeight()/2 + i);
                    g.drawLine(OFFSET, this.getHeight()/2 - i, this.getWidth() - OFFSET, this.getHeight()/2 - i);                       
                } else {
            //        System.out.println("i+OFFSET= " + (i+OFFSET) + " WIDTH-OFFSET= " + (this.getWidth()-OFFSET)
            //                         + " i+OFFSET= " + (i+OFFSET) + " HEIGHT-OFFSET= " + (this.getHeight()-OFFSET));
                    System.out.println("i= " + i + " Breite= " + this.getWidth() + " Höhe= " + this.getHeight());
                   
                    // Zeichne Senkrechte Linien alle 45°
                    g.drawLine(OFFSET + i, OFFSET , OFFSET + i, this.getHeight() - OFFSET);
                    // Zeichne Waagerechte Linien alle 45°
                    g.drawLine(OFFSET, this.getHeight() - OFFSET - i, this.getWidth() - OFFSET , this.getHeight() - OFFSET - i);   
                }   
                i +=45;   
            }
    }

Fehlerbeschreibung:
Sowhohl Waagerechte als auch Senkrechte Linien werden über der Grenze (Bereich OFFSET) gezeichnet.

Die passiert...,
... wenn die Fensterhöhe kleiner als die Fensterbreite wird.
... wenn die Fensterbreite kleiner als die Fensterhöhe wird.

Ich denke es liegt an der (while) Schleifenbedingung. Aber ich sehe derzeit keine Lösung.
Hier der Code der Klasse:

https://www.dropbox.com/s/j63a5zmyk6le7qz/SignalTimeChart.java?dl=0&preview=SignalTimeChart.java

Ich hoffe Ihr könnt mir helfen.

MfG
 
Bei deinem File auf der Dropbox hast du in der Schleifebedinung kein logisches || oder sondern ein |, da kann unter anderem zu einem unerwünschten verhalten führen.
In beiden Zweigen deiner if-Bedingung zeichnest du eine Linie welche als x1 bzw. x2 Parameter "OFFSET + i" bekommen. Wäre für mich dann ein logischer Schluss das dort der Fehler liegt. Wenn der OFFSET die Grenze sein soll dann dürfen meiner Meinung nach keine Werte > OFFSET verwendet werden.
 
Hallo!

Danke für die Antwort!

Wenn ich bei x1 wie x2 OFFSET weg lasse, dann wird die erste Linie 45 Pixel ab dem linken Rand gezeichnet. Die erste Senkrechte Linie wird dann nicht mehr 45 Pixel rechts neben der Y-Achse gezeichnet.

Mein Problem sind die waagerechten Linien oberhalb & die senkrechten Linien rechts neben dem Diagramm, wenn wie oben beschrieben die 2 Fälle der Vergrößerung/Verkleinerung eintreten.

Das mit dem logischen ODER ist richtig, ist aber meinerseits so gewollt, dass || da steht.
 
Habe einen Tipp bekommen, alles in for Schleifen gepackt & unterteilt. Es funktioniert jetzt so wie gewünscht!

Java:
// Raster einfügen
    private void drawPattern(Graphics g){
        for (int i = 0; i < this.getWidth() - OFFSET*2; i+=45) {
            // Zeichne Senkrechte Linien alle 45°
            g.drawLine(OFFSET + i, OFFSET , OFFSET + i, this.getHeight() - OFFSET);
        }
      
        for (int i = 0; i < this.getHeight() - OFFSET*2; i+=45) {
            if (!twoQuadrantSystem)    // Zeichne Waagerechte Linien alle 45°
                g.drawLine(OFFSET, this.getHeight() - OFFSET - i, this.getWidth() - OFFSET , this.getHeight() - OFFSET - i);
            }
        if (twoQuadrantSystem){  
            for (int j = 0; j < this.getHeight()/2 - OFFSET; j+=45) {
                // Zeichne Waagerechte Linien alle 45° (unterhalb Mitte)
                g.drawLine(OFFSET, this.getHeight()/2 + j, this.getWidth() - OFFSET, this.getHeight()/2 + j);
            }  
            for (int j = 0; j < this.getHeight()/2 - OFFSET; j+=45) {
                // Zeichne Waagerechte Linien alle 45° (oberhalb Mitte)
                g.drawLine(OFFSET, this.getHeight()/2 - j, this.getWidth() - OFFSET, this.getHeight()/2 - j);
            }  
        }   
    }

D A N K E!
 

Neue Themen


Zurück
Oben