2016-08-18 2 views
4
public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     Graphics2D g2 = (Graphics2D) g; 
     g2.fillRect(0,0,25,25); 
} 

OUpaintComponent (g) ou paintComponent (g2)?

public void paintComponent(Graphics g){ 
    Graphics2D g2 = (Graphics2D) g; 
    super.paintComponent(g2); 
    g2.fillRect(0,0,25,25); 
} 

Ce qui serait correct si j'utilisais Graphics2D? Serais-je encore paintComponent (g) ou passerais-je à g2 à la place? Désolé si c'est une question stupide, je voudrais utiliser le second, mais je veux juste savoir quelle serait la bonne façon au cas où je fais quelque chose de mal.

+2

Si 'g' est en fait un' Graphics2D' (et je ne vois pas AWT revenir), alors ils sont ** littéralement ** les mêmes. –

+0

Cela ne fait aucune différence. C'est le même objet. – EJP

Répondre

4

Graphics est une classe abstraite et, en tant que telle, ne peut pas être instanciée. Étant donné que Graphics a seulement deux implémentations dans la bibliothèque Java native, Graphics2D et DebugGraphics, vous pouvez supposer que g sera Graphics2D, ce qui rend la seconde méthode plutôt redondante (mais pas incorrecte). DebugGraphics est rarement utilisé pour dessiner des graphiques à la main. Pour résumer, vous pouvez le transmettre dans les deux sens, car ils sont équivalents à 100%.

4

La méthode paintComponent accepte Graphics comme paramètre, et Graphics2D est une sous-classe de Graphics. Ainsi, passer g à super.paintComponent équivaut à passer g2. Ce serait cependant différent si super.paintComponent est surchargé de sorte qu'une version accepte Graphics et une autre version accepte Graphics2D (ce qui n'est pas le cas ici).