2013-01-06 7 views
-1

Quelle est la meilleure pratique ou standard pour dessiner des graphiques dans Java? J'ai mon jframe avec un Jpanel et une classe (foo) qui contient un polygone (forme). Si je veux afficher la forme des classes dois-je appeler foo.draw (passer le graphics2d et quelques autres choses) et le faire dessiner lui-même (ce qui je pense serait encapsulation? Je crois est préféré?) Ou faire tout le dessiner dans ma méthode drawScreen()?Pratiques de dessin de bonnes pratiques/normes Java

Merci

+1

Qu'est-ce que la classe Foo est censée faire? – Swapnil

+0

Je suis en train de faire des astéroïdes et j'ai presque tout fait, mais l'affichage réel. Foo serait un astéroïde, mais pour la question, je pensais que c'était un peu hors de propos? –

+0

Ok. "le faire dessiner lui-même" n'est pas vraiment l'encapsulation, mais http://en.wikipedia.org/wiki/Single_responsibility_principle à moi. – Swapnil

Répondre

1

Si le Foo ne doit jamais se chevaucher avec d'autres graphiques, par exemple c'est une étiquette ou un bouton, alors il devrait définitivement se dessiner. Je suggère de proroger JComponent, mettre en œuvre paintComponent(), et être ajouté à l'aide d'un LayoutManager etc., etc.

Si le Foo peut se chevaucher avec d'autres graphiques (par exemple, il est un jeu d'espace et le polygone est un mouvement rapide en-tête d'astéroïdes vers la terre) alors les choses deviennent plus délicates. Je pense toujours que si le Foo sait comment dessiner un graphique, mais vous ne voulez pas étendre JComponent.

option 1: étendez JComponent et implémentez paintComponent, mais notez dans les javadocs qu'il ne s'agit pas d'un composant "réel" JComponent et qu'il n'est jamais ajouté à l'aide d'un LayoutManager. Vous pouvez même modifier addNotify() pour lancer une exception pour empêcher cela.

Option 2: avoir l'icône de l'outil Foo - une jolie petite interface pour les dessins légers.

Cela pose encore la question, quelque chose sinon doit lui dire de dessiner lui-même. Donc, quelque chose doit garder une liste de ces JComponents ou Icônes et leur dire de dessiner ...