Java2D - Zeichenreihenfolge

BenLie

Mitglied
Hallo,

ich beschäftige mich derzeit mit Java2D.
Ich habe eine Klasse geschrieben, welche von Container erbt und deren Paint-Methode überschrieben (hier mal die paint-Methode etwas vereinfacht).

Java:
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        Graphics2D g2d = (Graphics2D) g;
        
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        AffineTransform at = new AffineTransform();
        at.translate(drawX, drawY);
        at.rotate(Math.toRadians(rotation));
        at.scale(scale, scale);
        g2d.setTransform(at);

g2d.drawImage(img, null, this);
    }

Wenn ich nun zwei dieser Objekte erzeuge und einem JFrame hinzufüge, wird das zuletzt hinzugefügte Objekt immer hinter den anderen bereits existierenden Objekten gezeichnet. Wie kann ich diese "Reihenfolge des Zeichnens" manipulieren. Wie kann ich z.B. ein bereits exestierendes Objekt in den vordergrund holen?

Über hilfreiche Codebeispiele oder Links, welche das Prinzip verdeutlichen, würde ich mich freuen.

Gruß
Benjamin
 

BenLie

Mitglied
Später sollen die Objekte dynamisch erzeugt werden.
Zum JFrame werden sie dann ja per

Java:
getContentPane().add(to);

hinzugefügt.
Wie kann ich dort dann sagen, welche Objekt als erstes gezeichnet werden soll? Und wie kann ich die Reihenfolge im nachhinein verändern?

Wenn ich z.B. auf ein Objekt mit der Maus klicke (bzw. touche, da das ganze eine Multitouch-Anwendung wird) verändere ich die Eigenschaften (z.B. Position) und führe dann ein repaint() aus. Dennoch wird das Objekt hinter den anderen Objekten gezeichnet.

Java:
public void addRotation(float rotation) {
    this.rotation += rotation;
    repaint();
}
 

BenLie

Mitglied
Ich habe es nun mit JLayeredPane umgesetzt.
Dort kann man Objekte auf verschiedenen Layern zeichnen und innerhalb des Layers die Position angeben.

Einfach vom Jframe die Methode getLayeredPane() benutzen, anstatt getContentPane().
Dann kann man mit pane.setLayer() und pane.setPosition() die "Reihenfolge" angeben..

Gruß Benjamin
 

Ähnliche Java Themen

Neue Themen


Oben