Hi,
ich habe eine Komponente, die einen Pfeil zeichnen soll. Dieser Pfeil soll die Komponente immer in voller Höhe ausfüllen. Das Zeichnen selbst klappt auch wunderbar, wenn die Komponente jedoch vergrößert wird, dann überlagt sich das neu gezeichnete Bild immer mit den vorher gezeichneten. Siehe Screenshot. Der linke Teil zeigt den Pfeil nach dem ersten Zeichnen, der rechte nach einer Vergrößerung.
Folgender Code wird zum Zeichnen benutzt:
Weder das g2.clearRect(), noch das g2.fillRect() ändern etwas an dem Problem. Irgendwelche Ideen?
ich habe eine Komponente, die einen Pfeil zeichnen soll. Dieser Pfeil soll die Komponente immer in voller Höhe ausfüllen. Das Zeichnen selbst klappt auch wunderbar, wenn die Komponente jedoch vergrößert wird, dann überlagt sich das neu gezeichnete Bild immer mit den vorher gezeichneten. Siehe Screenshot. Der linke Teil zeigt den Pfeil nach dem ersten Zeichnen, der rechte nach einer Vergrößerung.
Folgender Code wird zum Zeichnen benutzt:
Code:
private static final int PFEIL_DICKE= 2;
private static final int SPITZEN_HOEHE= 12;
private static final int SPITZEN_BREITE= 10;
private static final Stroke STROKE_DICK= new BasicStroke(PFEIL_DICKE);
private static final Stroke STROKE= new BasicStroke();
private final Polygon pfeilspitze= new Polygon();
@Override
public void paintComponent(final Graphics g) {
final Graphics2D g2= (Graphics2D) g;
final Rectangle bounds= this.getBounds();
final int x= (int) bounds.getX();
final int y= (int) bounds.getY();
final int w= (int) bounds.getWidth();
final int h= (int) bounds.getHeight();
pfeilspitze.addPoint(y/2, h);
pfeilspitze.addPoint(y/2 - SPITZEN_BREITE/2, h-SPITZEN_HOEHE);
pfeilspitze.addPoint(y/2 + SPITZEN_BREITE/2, h-SPITZEN_HOEHE);
//g2.clearRect(x, y, w, h);
g2.setPaint(this.getBackground());
System.err.println(this.getBackground());
g2.fillRect(x, y, w, h);
g2.setPaint(Color.BLACK);
g2.setStroke(STROKE_DICK);
g2.drawLine(y/2, 0, y/2, h-SPITZEN_HOEHE);
g2.setStroke(STROKE);
g2.fillPolygon(pfeilspitze);
}
Weder das g2.clearRect(), noch das g2.fillRect() ändern etwas an dem Problem. Irgendwelche Ideen?