Domanda

Qual è l'effettiva differenza tra paint(), paintComponent() e paintComponents() in Java Swing?

Ho cercato di capire cosa spiegato nei documenti Oracle ma non mi è chiaro.

È stato utile?

Soluzione

  • AWT, sovrascrivi paint().
  • Swing contenitore di primo livello (ad esempio, sono JApplet, JFrame, JWindow, JDialog ..), sovrascrive paint().Ma ci sono una serie di buone ragioni non per dipingere in un TLC.Un argomento per una domanda a parte, forse.
  • Il resto di Swing, sovrascrive paintComponent().
  • Non sovrascrivere né chiamare esplicitamente paintComponents(), lasciare che sia l'API a chiamarlo quando necessario.

Assicurati di utilizzare anche la notazione @Override ogni volta che sovrascrivi un metodo.

In questo modo si suggerirebbe il problema di provare a sovrascrivere paintComponent(..) in un JFrame (non ha tale metodo), cosa abbastanza comune da vedere.

Altri suggerimenti

Potresti essere interessato a leggere Pittura in AWT e Swing

Una citazione:

Le regole che si applicano ai componenti leggeri di AWT si applicano anche ai componenti Swing - ad esempio, paint () viene chiamato quando è il momento di eseguire il rendering - tranne per il fatto che Swing considera ulteriormente la chiamata paint () in tre metodi separati, invocato nel seguente ordine:

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

I programmi Swing dovrebbero sovrascrivere paintComponent () invece di sovrascrivere paint (). Sebbene l'API lo consenta, generalmente non c'è motivo di sovrascrivere paintBorder () o paintComponents () (e se lo fai, assicurati di sapere cosa stai facendo!). Questa fattorizzazione rende più facile per i programmi sovrascrivere solo la parte del dipinto che devono estendere. Ad esempio, questo risolve il problema AWT menzionato in precedenza in cui il mancato richiamo di super.paint () ha impedito la visualizzazione di qualsiasi bambino leggero.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top