Frage

Ich zeichne Formen in diesem JPanel, die auch in einer anderen Haupt JPanel ist. Bei repaint() zieht es nur die Formen für eine Millisekunde und dann verschwinden sie. Sie bleiben nicht gemalt, warum?

Meine paintComponent Methode ist so etwas wie diese

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);

    for (int i = 0; i < reportElements.size(); i++) {
        this.reportElements.get(i).display((Graphics2D) pageComponents.get(i).getGraphics());

    }
}

Wenn die Eltern ein JEditorPane mit setEditable() aktiviert ist, funktioniert es und wir können die Formen sehen, aber wenn es ein JPanel ist nach einer Millisekunde alles, was ich sehe, ist leer Panels.

War es hilfreich?

Lösung

  

in diesem Fall, was mit denen geschieht,   pageComponents, die kleinen JPanels? Das   Mutterplatte nicht gonna Zeichne die   Formen auf ihnen ist es?

Ich bin mir nicht sicher, ob ich Ihren Kommentar undertand. Ihr Hauptfeld soll Kind Platten enthält. Die Kindertafeln sollten am Hauptfeld mit einem Layout-Manager hinzugefügt werden. Dann, wenn Schaukel das Hauptfeld neu zu zeichnen entscheidet, wird es auch alle Kinderplatten neu streichen und wiederum die Kindertafeln gibt es Formen neu streichen.

Für das, was ihren Wert Benutzerdefinierte Gemälde Ansätze hat ein funktionierendes Beispiel von Formen auf einer Tafel zeichnen.

Andere Tipps

Sie auf das Graphics-Objekt des JPanel malen sollten es dauerhaft zu sein ... In Ihrem Beispiel, das heißt die Graphics g ...

ultrajohn ist tot auf. Sie müssen die Graphics verwenden Sie weitergegeben wurden. Lesen Sie weiter für die, warum ...

Java 1.6 die RepaintManager eingeführt, die die Optimierung der Repaint-Anforderungen unterstützt. Es hat einige subtile Effekte auf die Malerei.

In diesem Fall Sie arbeiten mit mehreren Graphics2D Objekten: die g in paintComponent bestanden und dem von dem getGraphics Aufruf zurückgegebene Wert

.

Der Repaint Manager hat Sie an dem geben g zu malen. . Hinweis: diese nicht auf dem Bildschirm malt, sondern auf einem temporären Puffer (vorausgesetzt, das Standard-Double-Buffering)

In der paintComponent rufen Sie malen auf die erhaltenen Grafiken von getGraphics der verschiedenen Komponenten. Dies wird den Repaint Manager zu umgehen und direkt auf die ungepufferte Anzeige zu malen.

Wenn paintChildren zurückkehrt, tritt der RepaintManager in den Doppelpuffer zu handhaben zu aktualisieren. Es zeichnet die leeren temporären Puffer über den angezeigten Puffer, effektiv zu löschen, was durch die Grafiken gemalt von getGraphics Objekt erhielt

Es kann sein, dass paintChildren oder paintBorder Overdraws sein, was Sie in Ihrer Methode gezeichnet haben. Vielleicht versuchen paint zwingende statt. Dort haben Sie die volle Kontrolle über das, was auf dem Bauteil gemalt werden, und Sie können selbst entscheiden, ob weiter gar paintComponent, paintChildren oder paintBorder zu nennen.

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