Nur ein Objekt auf Canvas neu zeichnen

  • Themenstarter Themenstarter FreundDerSonne
  • Beginndatum Beginndatum
F

FreundDerSonne

Gast
Hallo,

Ich habe ein Canvas, auf dem Raumplan (png, wird geladen u skaliert) angezeigt wird. Da drüber zeichne ich ein Liniengitter. Nun soll man ein einzelnes Feld des Gitters auswählen können, wozu ich über dieses ein transparentes Rechteck zeichne. Mit dem Pfeiltasten soll dieses bewegt werden können.
Nun das Problem: Wie lösche ich das alte Auswahlrechteck, ohne die Hintergrundgrafik neu zu laden und skalieren, denn das geht von der Performance gar nicht.
Hat jemand einen Lösungsvorschlag? Gibt es so was wie "Layer"/oder "Ebenen", dass man also Objekte einer ebene zuweist u dann nur Objekte dieser Ebene neu rendert?
 
Das BIld sollte ohnehin nur EINmal geladen und skaliert werden. Das beschriebene läßt sich i.a. GROB durch dieses Muster erreichen
Java:
java TheClass extends Canvas
{
    private Image image = null;
    private Image scaledImage = null;

    public TheClass()
    {
        image = ImageIO.... (laden)
    }

    public void paint(Graphics g)
    {
        super.paint(g);
        validateScaledImage();
        g.drawImage(scaledImage...);
    }

    private void validateScaledImage()
    {
        if (scaledImage == null || seine Größe ist nicht die Canvasgröße) 
            erstelleScaledImageAusImage();
    }

}
 
Ja, das funktioniert, aber es flackert halt immer, wenn man die Auswahl bewegt. Kann man da was machen? Es gibt ja so Buffer oder so. Helfen die?
 
Steige auf Swing um. Erbe von JApplet statt von Applet und zeichne statt in einem Canvas in einem JPanel. Das JPanel fügst du dann dem JApplet hinzu.
AWT ist veraltet, du müsstest das DoubleBuffering ins Canvas einbauen (Forumsuche). Swing ist die aktuelle API, wenns um GUI-Programmierung oder zeichnen geht. Die Komponenten aus Swing sind bereits gepuffert, du brauchst dich um DoubleBuffering nicht mehr kümmern.
 

Zurück
Oben