Frage

Was ist der tatsächliche Unterschied zwischen paint(), paintComponent() und paintComponents() in Java Swing?

Ich habe versucht zu verstehen, was in Oracle-Dokumenten erklärt wurde, bin mir aber nicht sicher.

War es hilfreich?

Lösung

  • AWT, paint() überschreiben.
  • Swing-Container der obersten Ebene (z. B. JApplet, JFrame, JWindow, JDialog ..) überschreiben paint().Es gibt jedoch eine Reihe guter Gründe, nicht in einem TLC zu malen.Vielleicht ein Thema für eine separate Frage.
  • Der Rest von Swing überschreibt den paintComponent().
  • paintComponents() weder überschreiben noch explizit aufrufen. Überlassen Sie es der API, um es bei Bedarf aufzurufen.

    Verwenden Sie beim Überschreiben einer Methode auch die Notation @Override.

    Dies würde auf das Problem hinweisen, dass versucht wird, paintComponent(..) in einem JFrame zu überschreiben (es gibt keine solche Methode), was häufig vorkommt.

Andere Tipps

Vielleicht möchten Sie Malen in AWT und Swing

Ein Zitat:

Die Regeln, die für die leichten Komponenten von AWT gelten, gelten auch für Swing-Komponenten - zum Beispiel wird paint () beim Rendern aufgerufen - mit der Ausnahme, dass Swing den Aufruf von paint () in drei separate Methoden unterteilt wird in der folgenden Reihenfolge aufgerufen:

 protected void paintComponent(Graphics g)
protected void paintBorder(Graphics g)
protected void paintChildren(Graphics g)

Swing-Programme sollten paintComponent () überschreiben, anstatt paint () zu überschreiben. Obwohl die API dies zulässt, gibt es im Allgemeinen keinen Grund, paintBorder () oder paintComponents () zu überschreiben (und wenn Sie dies tun, stellen Sie sicher, dass Sie wissen, was Sie tun!). Dieses Factoring erleichtert es Programmen, nur den Teil des Gemäldes zu überschreiben, den sie erweitern müssen. Dies löst beispielsweise das zuvor erwähnte AWT-Problem, bei dem ein Fehler beim Aufrufen von super.paint () das Auftreten leichter Kinder verhinderte.

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