[Java] Pbr principes de conception IHM....

Pbr principes de conception IHM.... [Java] - Java - Programmation

Marsh Posté le 30-09-2003 à 08:31:57    

:hello:
 
J'ai beaucoup du mal avec les concepts de programmation evenementiel (ca fait 2 ans que je fais du Java mais j'ai jamais codé une IHM de ma vie, C vraiment pas une partie qui m'attire....)
j'ai du mal a comprendre comment faire pour faire communiquer proprement 2 composants par exemple, où déclarer les listeners...
 
 
Petit exemple tout bête...
 
J'ai une Fenetre (jFrame1)  avec 2 panel a l'interieur (jPanel1 & jPanel2)
jPanel1 contient un bouton
jPanel2 contient une TextArea
 
Je veux faire en sorte qu'en clickant sur le bouton, un msg apparaisent dans la textArea..
 
 
En Java, sans réfléchir je coderai comme ca..
 

Code :
  1. public class JFrame 1 extends JFrame {
  2. JPanel jPanel1;
  3. JPanel jPanel2;
  4. }
  5. public class JPanel1 extends JPanel {
  6. JButton button1 = new Button();
  7. }
  8. public class JPanel2 extends JPanel {
  9. JTextArea textArea = new JTextArea();
  10. }


 
 
Mes questions :
Je dois ajouter un listener au bouton..
Ce listener, sur action "click", doit ecrire dans le textArea..
Où vaut-il mieux instancier ce Listener ??
Dans JFrame1 (soit en classe interne, soit en faisant un implements ActionListener) ??
Dans JPanel1 ????
J'aurai tendance a vouloir l'instancier dans JPanel1 mais dans ce cas là, il me faut la réference du TextArea..
L'avantage de le déclarer dans JFrame1 C que je peux récupérer plus facilement la ref sur textArea...
 
 
Je suis totalement perdu, j'ai du mal avec le concept MVC...
:/
 
Une URL d'un bon Tutorial Sun a me proposer sinon ??
(même si je prefererai une explication écrite par un petit gars comme moi... :D )
 
Merciiii beaucoup  
:jap:


---------------

Reply

Marsh Posté le 30-09-2003 à 08:31:57   

Reply

Marsh Posté le 30-09-2003 à 10:02:28    

Tutorial Swing:
http://java.sun.com/docs/books/tutorial/uiswing/
Partie sur les boutons:
http://java.sun.com/docs/books/tut [...] utton.html


---------------
Light is right
Reply

Marsh Posté le 01-10-2003 à 14:28:30    

Dephi a écrit :

Petit exemple tout bête...
 
J'ai une Fenetre (jFrame1)  avec 2 panel a l'interieur (jPanel1 & jPanel2)
jPanel1 contient un bouton
jPanel2 contient une TextArea
 
Je veux faire en sorte qu'en clickant sur le bouton, un msg apparaisent dans la textArea..


 
Selon le modèle MVC, il faut enregistrer un listener sur le bouton car c'est son activation qui va déclencher l'événement "écrire le message dans le TextArea". Ce listener doit connaître le modèle du TextArea, soit un objet de type Document. Lors de l'activation de ce listener, ce dernier ajoute le message dans le Document et l'affichage est alors automatiquement mise à jour car ce Document se charge lui-même d'informer son TextArea de réactualiser son affichage.

Reply

Marsh Posté le 03-10-2003 à 11:08:56    

Merci pour les réponses...
:jap:
 
 
Mais après avoir lu X tutorials sur le net, et essayer de suivre vos conseils j'ai encore ENORMEMENT de mal à comprendre comment faire proprement..
:(
 
Je suis arrivé à une architecture qui me parait assez correcte (car je sépare vraiment l'aspect graphique pur de l'aspect metier)
mais j'aimerai avoir votre avis please.. (vu que j'y connais rien..)
 
Ma future appli n'a pas une IHM très compliqué, peu d'interactions "inter-composants", C plus
sur la gestion et algorythme de graph que je vais me prendre la tete (heureusement JGraph est là.. :D )
J'ai donc :
1 JFrame principale composée de :
 - 1 menu
 - 1 toolBar
 - 1 JPanel  
 - et X fenetre internes (chacune composée de 3 JPanel)
 
Ce que je comptais faire :
<> La JFrame principale (appelons là mainJFrame) appelle  l'initialisation de ses différents composants et les ajoute a son ContentPane
 
<> les composants IHM propose des méthodes publiques pour récupérer "leurs sous-composants" (dans le cas de la JToolBar, getButtonNew(), getButtonSave()...)...
 
<> a la fin de l'initialisation IHM, C mainJFrame qui s'occupe des evenements...
J'ai crée des classes dédiés à la gestion des evenements du style
 

Code :
  1. public class JToolBarActionListener extends ActionListener {
  2.                                                                
  3.     public static final String ACTION_NEW = "New";                     
  4.     public static final String ACTION_OPEN = "Open";                   
  5.     public static final String ACTION_SAVE = "Save";                   
  6.    
  7.     // reference sur la fenetre principale  
  8.     private MainJFrame mainJFrame;
  9.    
  10.     public JToolBarActionListener(MainJFrame mainJFrame_p) {   
  11.      mainJFrame = mainJFrame_p;
  12.     } 
  13.    
  14.    
  15.     public void actionPerformed(ActionEvent actionEvent_p) {                                                             
  16. String actionCommand_l = actionEvent_p.getActionCommand();                 
  17.                                                                                    
  18. if (actionCommand_l.equals(ACTION_NEW)) {                                         
  19.     // je reprends l'exemple, je clicke sur un bouton, affichage dans JTextArea...
  20.     mainJFrame.getJPanelStatus().appendText("New Project..." );
  21.                                                                                    
  22. } else if (actionCommand_l.equals(ACTION_OPEN)) {                                 
  23. ...
  24. }
  25. ...
  26.     }
  27. }


 
 
<> mainJFrame n'a "plus qu'a faire"  

Code :
  1. JToolBarActionListener jtbaL = new JToolBarActionListener(this);                   
  2. jToolBarComponent.getButtonOpen().setActionCommand(JToolBarActionListener.ACTION_OPEN);
  3. jToolBarComponent.getButtonOpen().addActionListener(jtbaL);                   
  4. jToolBarComponent.getButtonNew().setActionCommand(JToolBarActionListener.ACTION_NEW); 
  5. jToolBarComponent.getButtonNew().addActionListener(jtbaL);

                                               
                                                       
                                                       
L'initialisation des evenements risque d'etre un peu loue mais au moins, je trouve qu'elle
est centralisée (facilement retrouvable) et je sépare rlement l'aspect IHM du reste...
Maintenant, ca ne suit pas du tout (il me semble) les p      atterns concernant les evenements IHM...
                                                       
Votre avis please..                                    
C vraiment pourri-pourri ou C acceptable ?? (ou lachons nou, C une idée de génie.. :sarcastic:)    
(tous les commentaires sont les bienvenus..)            
                                                       
                                                       
D'avance merci et désolé pour ces questions facon newbie total...
:sweat:


Message édité par Dephi le 03-10-2003 à 11:10:39

---------------

Reply

Marsh Posté le 03-10-2003 à 11:27:08    

salut delphi,
 
je crois comprendre ton probleme.
le fait est effectivement , que l 'on peut coder ca de plein de facon differente .
Ce que j aime pas trop en java c'est lorsque l on declare des classes a l 'interieur d'autres , ca rends vite les choses ..desagreables.
 
j ai essaye un peu le java et le plus plossible j'eesaie de garder un "fichier" par objet. et au point de vue conception je fais excactement dans l esprit de ce que tu a citer ci dessus.
 
ce qui a mon gout est plus propre.
 
 
si tu veux plus d info tu peux tenter une recherche sur le MVC
(model vue controlleur) qui t esplique comment creer une ihm en separant au mieux les couches (presentation interraction donnes)
 
 
FK

Reply

Sujets relatifs:

Leave a Replay

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