2010-12-30 20 views
0

Ich arbeite an einer Anwendung, die Boxen zeichnet und verbindet sie mit Linien. Jede Linie hat Ecken (Punkte). Der Benutzer kann Punkte hinzufügen, indem er mit der rechten Maustaste auf die Linie klickt. Dann erhält der Punkt einen Standort.Paint Operation wird nicht ausgeführt, aber das System funktioniert nicht

Die Malmethode des Diagramms durchläuft alle Punkte und prüft, ob sie benutzerdefiniert sind (einfach; return (location! = -1)), wenn sie da sind, muss ein Kreisbild an dieser Stelle gezeichnet werden.

Jetzt reiße ich wirklich mein Gehör auf, weil es im Debug-Modus ausgeführt wird, aber nicht zeichnen! Ich habe ein System zur Überprüfung platziert und das wird normal ausgeführt. Aber die if-Anweisung funktioniert, wenn ich ein! Zeichen vor der if-Anweisung. Ich kann das Problem wirklich nicht finden.

Die Farbe Methode:

public void paint(Graphics2D g) { 
    g.setColor(Color.RED);//_lineColor); 
    g.setStroke(new BasicStroke(DEFAULT_LINE_SIZE)); 

    for(Line2D line : _lines) { 
     g.draw(line); 
    } 

    if(_isHover) { 
     for(ConnectionDot dot : _connectionDots) { 
      if(dot.isUserDot()) { 
       System.out.println("YEAH!!!"); 
       //TODO: dot hover? 
       g.drawImage(_icoConnectionNor.getImage(), dot.getX()-8, dot.getY()-8, null); 

       //g.drawString("What?", dot.getX(), dot.getY()); 
      } else { 
       System.out.println("Hell No!"); 

       g.drawString("What?", dot.getX(), dot.getY()); 
      } 
     } 
    } 
} 

Die Dot-Klasse:

public class ConnectionDot { 
//... 
private int _userDotQueueLoc; 

/** 
* Create new dot. 
* 
* @param gridController reference to the grid controller. 
* @param grid Grid position of the dot. 
*/ 
public ConnectionDot(GridController gridController, Grid grid){ 
    _gridController = gridController; 
    _gridPos = grid; 
    _userDotQueueLoc = -1; 
} 

/** 
* Create new user dot. 
* 
* @param gridController reference to the grid controller. 
* @param grid Grid position of the dot. 
* @param userDotLocation Location of user dot. 
*/ 
public ConnectionDot(GridController gridController, Grid grid, int userDotLocation){ 
    this(gridController, grid); 
    _userDotQueueLoc = userDotLocation; 
} 

/** 
* Returns true if the dot is custom. 
* 
* @return Flag. 
*/ 
public boolean isUserDot(){ 
    return (_userDotQueueLoc != -1); 
} 

}

Console Ausgabe: Hell No! Hölle Nein! Hölle Nein! Hölle Nein! JA !!! Hölle Nein! Hölle Nein! Hölle Nein! Hölle Nein! JA !!! ... Sie erhalten den Punkt

+1

Für bessere Hilfe, früher, ein SSCCE (http://pscode.org/sscce.html). –

+0

Es muss nicht gedehnt werden, wo du denkst, dass es ist. Wie Andrew sagte, müssen Sie einen SSCCE veröffentlichen. – jzd

+0

Ok .. habe gerade den Link angeschaut und weiß wirklich nicht, was ich damit machen soll. (Mucho lesen: P) Aber ich habe das Problem gefunden. –

Antwort

0

Vielleicht sind Ihre x/y-Werte des Punktes falsch.

Wenn Sie einen String bei (0, 0) malen, wird die Zeichenkette nicht angezeigt, da drawString erwartet, dass der Punkt unten/links ist, nicht oben/links.

Auf der anderen Seite verwendet ein Bild ein Bild oben/links, also ziehen Sie das Bild möglicherweise vom Subtrahieren ab, wenn Sie 8 subtrahieren.

Aber wie andere darauf hingewiesen haben, ist die einzige Möglichkeit, sicher zu wissen, ein SSCCE zu posten.

+0

Danke! Es war nicht wirklich das Ding, aber es ließ mich über den Ort des Punktes nachdenken. Die Position des Punktes ist ein Gitter und ich habe einen Fehler in der addUserDot-Methode gemacht, der die x- und y-Punkte anstelle der Gitterposition hinzugefügt hat. So zeichnete es in Position 3020,2393 oder so. –

0

Vielleicht müssen Sie den Bildschirm zwingend neu streichen? Es könnte sein, dass es Ihre Aktionen liest, es jedoch nicht anzeigt. Ich habe noch nie mit 'Graphics2D' gearbeitet, daher kenne ich die Methode nicht, aber Sie sollten es leicht finden können.

+0

Das ist falsch. Das println wird auf der Konsole angezeigt, so dass die Malmethode aufgerufen wird. Das Problem ist woanders. – jzd

Verwandte Themen