Frage

Einige Benutzer unserer Swing-Anwendung haben seltsame Artefakte auf dem Display erscheinen, berichtet. Dies reicht von Komponenten selbst nicht richtig Neuanstrich für eine Sekunde oder zwei, rechts bis ganze Teile der Anwendung wie Fliesen Tapete über Bereiche des Fensters neu gestrichen werden.

Die App wurde von den Entwicklern von allen Ebenen zwischen erfahrenen Java Jungs jungen Burschen direkt aus der Universität im Laufe von fünf Jahren bearbeitet oder so, und wie man es erwarten würde, ist ein Teil des AWT-Code ein völliges Durcheinander . Ich bin jetzt mit der Aufgabe zu versuchen, zu korrigieren, wie viel von der Schlechtigkeit, wie ich kann in den nächsten paar Monate oder so konfrontiert.

Einige dieser ist einfach, zu beschäftigen. Deal mit Komponenten nur auf dem Event Dispatch Thread, IO asynchron, Art der Sache, und ich hoffentlich bekommen die Botschaft an den Rest des Teams.

Was ich möchte wissen, ist der beste Weg, mit Graphics Kontexten beschäftigen, insbesondere in einem paintcomponent () Kontext. Ich sehe eine Menge von ...

public void paintComponent( Graphics g ) {
    super.paintComponent( g );
    Graphics2D gfx = (Graphics2D)g;
    // ...Whole lotta drawing code...
}

Ist es besser, Praxis, dies zu tun?

public void paintComponent( Graphics g ) {
    super.paintComponent( g );
    Graphics2D gfx = (Graphics2D)g.create();
    // ...Whole lotta drawing code...
    gfx.dispose();
}

Wenn der g-Parameter wird dann in anderen Farben wiederverwendet werden nicht muss ich es auf einen guten Zustand wiederherzustellen, rückgängig machen AffineTransforms usw.?

War es hilfreich?

Lösung

Nach Filthy Rich Clients, sollten Sie die Graphics Objekt nicht ändern, um Sie übergeben (die als API saugt, IMO).

Der richtige Weg, es zu handhaben ist etwas ausführlicher:

public void paintComponent(Graphics g1) {
    super.paintComponent(g1);
    final Graphics2D g = (Graphics2D)g1.create();
    try {
         // ...Whole lotta drawing code...
    } finally {
         g.dispose();
    }
}

IIRC, in der Sonne Umsetzung spielt es keine Rolle, wenn Sie nicht von „Unter Graphics“ Objekten entsorgen. (Zitieren Sie mich nicht daran.)

Vielleicht möchten Sie diesen Kommentar Bit auf ein anderes Objekt übertragen.

Andere Tipps

hörte ich, dass dies in jdk-1.6.12 behoben worden, aber nicht versuchen Sie es.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top