[Swing] encapsulation et empilement

encapsulation et empilement [Swing] - Java - Programmation

Marsh Posté le 20-01-2004 à 21:21:56    

Bon, j'ai un soucis. Sur un précédent topic, j'avais posté un code qui avait fait fureur. En gros :
 

Code :
  1. public class MyView extends JPanel {
  2. ...
  3. }


 
Ce à quoi on m'avait rétorqué, à juste titre que ma vue n'était pas un panel au sens héritage du terme, et que cet extends ne se justifiait pas. Je le comprends bien, mais...
 
J'ai réfléchi au problème et je n'ai pas trouvé de solutions.
 
Solution 1.

Code :
  1. public class MyView {
  2.     private JComponent component = new JPanel();
  3.     public MyView() {
  4.         //ici j'empile des trucs sur component.
  5.     }
  6.     public JComponent getComponent() {
  7.         return component;
  8.     }
  9. }


Cette fois, MyView n'est plus un Panel, mais encapsule un panel (component) dont on pourra obtenir une référence afin notamment de faire ceci dans le Container d'une JFrame par exemple :

Code :
  1. JFrame frame = new JFrame();
  2. MyView view = new MyView();
  3. frame.getContentPane().add(view.getComponent());


Le problème alors c'est que l'on peut toujours appeler toutes les méthodes que l'on veut sur mon JComponent ainsi encapsulé...
 
Solution 2.
Je ne mets pas le getter, mais à la place je mets une méthode :

Code :
  1. public void add(Container c) {
  2.     c.add(component);
  3. }


Mais bon, c'est pas top, je trouve. Parce que c'est l'ordre inverse de l'empilement naturel. Bref.


---------------
Le site de ma maman
Reply

Marsh Posté le 20-01-2004 à 21:21:56   

Reply

Marsh Posté le 20-01-2004 à 21:29:06    

cherrytree a écrit :

Bon, j'ai un soucis. Sur un précédent topic, j'avais posté un code qui avait fait fureur. En gros :
 

Code :
  1. public class MyView extends JPanel {
  2. ...
  3. }


 
Ce à quoi on m'avait rétorqué, à juste titre que ma vue n'était pas un panel au sens héritage du terme, et que cet extends ne se justifiait pas. Je le comprends bien, mais...
 
J'ai réfléchi au problème et je n'ai pas trouvé de solutions.
 
Solution 1.

Code :
  1. public class MyView {
  2.     private JComponent component = new JPanel();
  3.     public MyView() {
  4.         //ici j'empile des trucs sur component.
  5.     }
  6.     public JComponent getComponent() {
  7.         return component;
  8.     }
  9. }


Cette fois, MyView n'est plus un Panel, mais encapsule un panel (component) dont on pourra obtenir une référence afin notamment de faire ceci dans le Container d'une JFrame par exemple :

Code :
  1. JFrame frame = new JFrame();
  2. MyView view = new MyView();
  3. frame.getContentPane().add(view.getComponent());


Le problème alors c'est que l'on peut toujours appeler toutes les méthodes que l'on veut sur mon JComponent ainsi encapsulé...
 
Solution 2.
Je ne mets pas le getter, mais à la place je mets une méthode :

Code :
  1. public void add(Container c) {
  2.     c.add(component);
  3. }


Mais bon, c'est pas top, je trouve. Parce que c'est l'ordre inverse de l'empilement naturel. Bref.

les verbes à l'envers, on leur met une préposition : addTo(Container c)
 
Par contre, je vois pas le problème avec la solution 1 qui me parraît la même, à tel point que je l'ai utilisé personnellement dans mon projet de chat et ai bien l'intention de continuer.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 20-01-2004 à 22:53:39    

On m'avait rétorqué que pouvoir faire un setBorder(Border) sur mon component n'était pas de très bon goût.


---------------
Le site de ma maman
Reply

Marsh Posté le 20-01-2004 à 22:58:28    

cherrytree a écrit :

On m'avait rétorqué que pouvoir faire un setBorder(Border) sur mon component n'était pas de très bon goût.

perso ça me dérange pas.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 21-01-2004 à 06:45:27    

Je crois que c'était cet intégriste de Taiche qui m'avait fait la remarque.


---------------
Le site de ma maman
Reply

Marsh Posté le 21-01-2004 à 08:18:10    

ouais mon l'ot taiche avec son swt là, faut pas le prendre au sérieux non plus :o


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 21-01-2004 à 08:32:45    

C'est vrai qu'il est pas crédible comme développeur Java. :/


---------------
Le site de ma maman
Reply

Marsh Posté le 21-01-2004 à 19:44:01    

moi j'aime bien les extends JPanel
pkoi ca seré mal?

Reply

Marsh Posté le 21-01-2004 à 19:49:54    

meumeul a écrit :

moi j'aime bien les extends JPanel
pkoi ca seré mal?

si je fais un add(JComponent) à ton composant, il va aimer ? en général non.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 23-01-2004 à 11:06:23    

Et que ce passera t'il si on fait :
 

Code :
  1. myView.getComponent().add(aComponent);


 
??


---------------
Le site de ma maman
Reply

Marsh Posté le 23-01-2004 à 11:06:23   

Reply

Marsh Posté le 23-01-2004 à 21:32:56    

cherrytree a écrit :

Et que ce passera t'il si on fait :
 

Code :
  1. myView.getComponent().add(aComponent);


 
??

Là c'est le bordel hérité de AWT, c'est du code, fossile auquel je considère qu'on ne doit pas toucher.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 23-01-2004 à 21:34:40    

gni ? Je comprends pas.


---------------
Le site de ma maman
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed