Java/Swing- Delphi
Les Listes

Objectif : On compare l'implantation de quelques propriétés, méthodes et événements du composant Swing JList et du composant Delphi TListBox.




Introduction

La philosophie de programmation des composants principaux de liste selon Delphi et selon Java-Swing est différente.

Delphi
Le composant de classe TListBox de delphi contient et permet d'afficher visuellement une liste d'éléments de chaînes parmi lesquels l'utilisateur peut sélectionner un ou plusieurs éléments, chaque élément est présent sur une ligne. La propriété objet Items est la propriété centrale de cette classe TListBox, elle sert à stocker les données de chaînes du TListBox et elle permet la gestion de tous les éléments de la liste. Cette propriété présente une double fonctionnalité : à la fois liste dynamique et tableau dynamique pour accéder à chacun des éléments. Ces éléments sont de type chaîne de caractère. Items dispose de toutes les méthodes classiques utilisables dans une telle structure de donnée : suppression -modification -insertion.

Java-Swing
Le composant JList permet uniquement d'afficher visuellement une liste d'éléments (objets quelconques y compris les chaînes) parmi lesquels l'utilisateur peut sélectionner un ou plusieurs éléments, chaque élément est présent sur une ligne. A la différence de Delphi ce composant JList utilise à plein l'architecture MVC (modèle-vue-contrôleur) de Java. Ce n'est pas le composant qui contient les données de la liste (un peu à la manière de la propriété Items en Delphi), mais un modèle séparé de la classe DefaultListModel (ce modèle doit être créé indépendamment du JList, alors que l'Items du TListBox est automatiquement créé par l'instanciation du TListBox). Toute modification des données de la liste doit donc être effectuée sur le modèle, c'est Java qui se charge ensuite de réafficher le contenu dans le JList. Toute utilisation du JList doit nécessairement suivre l'un des deux schémas ci-dessous :
 
  • DefaultListModel  modeldeliste = new DefaultListModel ( );
  • JList jList1 = new JList ( modeldeliste );

  • ou bien
  • DefaultListModel  modeldeliste = new DefaultListModel ( );
  • JList jList1 = new JList ( );
  • jList1.setModel( modeldeliste );

Nous ne considérons que la comparaison de manipulation de données de type string pour chacune des deux classes.

Propriétés :

Il n'y a pas beaucoup de propriétés semblables entre un TListBox et un JList.
 
Propriété
TListBox (Delphi)
JList(Swing)
Selection multiple 'Multiselect' (Boolean) .
ListBox1.Multiselect : = (true);
'setSelectionMode (int)'
jList1.setSelectionMode (int);
Changer la police, la      taille ou le style 'Font'
ListBox1.Font.Name:='Serif';
ou Font.Size pour la taille, Font.Style:=fsItalic;
'setFont'
jList1.setFont( Font.decode ("Serif") );  ou  pour définir la police, le style et la taille:
jList1.setFont(new java.awt.Font("Serif",1,14));
Changer la couleur du       texte  'Font'
ListBox1.font.Color:='clred';
'Foreground'
jList1.setForeground(Color.red);
Copier l' élément sélectionné de la liste dans une zone de texte 'Strings' de 'Items' et itemindex .
Edit1.Text:='a:'+ListBox1.Items.Strings[ListBox1.itemindex] ;
la propriété "String[x]", donne la chaîne de rang x. L'itemindex donne le rang de la chaîne sélectionnée.
'getSelectedValue'
jTextField1.setText("a:"+ jList1.getSelectedValue( ));
ou :
'getSelectedValues' si la liste est en multiselection.

 

Méthodes :

Notations pour l'utilisation de l'architecture MVC :

DefaultListModel  modeldeliste = new DefaultListModel ( );
JList jList1 = new JList ( modeldeliste );
Quelques méthodes parmi les plus utiles au départ :
Méthode
ListBox (Delphi)
JList(Swing)
s'applique au modèle : modeldeliste (cf. ci-haut)
Ajout d'élément (ou copier le contenu d'une zone de texte) à la fin de la liste 'Add' : de Items'.
Ajouter un élément à la liste:
ListBox1.Items.Add('Element1');
ou ajouter le contenu d'un Edit dans la liste
ListBox1.Items.Add(Edit1.Text);
'addElement':permet d'ajouter un  élément à  la liste.
modeldeliste . addElement("Element1");
ou ajouter le contenu d'un jTextField dans la liste:
modeldeliste . addElement(JTextField.getText( ));

 

Effacer la liste 'Clear': de 'Items'.
ListBox1.Items.Clear;
'clear' ou 'removeAllElements().
modeldeliste.clear( );
ou :
modeldeliste.removeAllElements( );
Effacer un élément (d'un rang précis 'x') de la liste. 'Delete' : de 'Items'
ListBox1.Items.Delete(x);
'removeElementAt'
modeldeliste.removeElementAt(x);
Inserer un élément à un rang précis 'Insert' : de 'Items' .
ListBox1.Items.Insert(x,'Toto' );
'add'.
modeldeliste.add(x,"Toto");
ou :
'insertElementAt'.
modeldeliste.insertElementAt("Toto",x);
Copier le texte d'un autre composant dans la liste 'Add'
ListBox1.Items.Add(Edit1.Text);
'setElementAt(component,int)'
modeldeliste.setElementAt(jTextField1.getText( ), 2);

 

Événements
Événement
ListBox (Delphi)
JList(Swing)
Click dans une liste OnClick:Permet de répondre au clic sur le composant.  mouseClicked: se produit lorsque le bouton de la souris est enfoncé et relaché sur le composant. 
Entrée dans le champ du composant OnEnter: Se produit lorsque le composant reçoit la focalisation (clavier ou souris). mouseEntered: Ici, l'événement se produit effectivement lorsqu'on vient se positionner sur le composant (écouteur de classe MouseAdapter).

focusGained : cet événement se produit lorsqu'un bouton obtient le focus à partir du clavier (écouteur de classe FocusAdapter).
 

Sortie du composant OnExit: se produit uniquement quand un autre composant est sélectionné c'est à dire quand le composand perd la focalisation. mouseExited: se produit effectivement dés qu'on sort du champ du composant (écouteur de classe MouseAdapter).

focusLost : cet événement se produit lorsque le composant perd le focus à partir du clavier (touche tabulation par exemple) ou de la souris (écouteur de classe FocusAdapter).

Enfoncer une touche OnKeyDown keyPressed
Relacher la touche OnKeyUp keyReleased
Enfoncer et relacher une touche OnkeyPress keyTyped
Enfoncer le bouton de souris sur le composant OnMouseDown: se produit quand le bouton gauche de la souris est enfoncé.  mousePressed: strictement équivalent à OnMouseDown de Delphi (écouteur de classe MouseAdapter).
Relacher le bouton de souris OnMouseUp: quand le bouton de la souris est relaché. mouseReleased: même chose que OnMouseUp (écouteur de classe MouseAdapter).
Déplacer  le curseur sur le composant OnMouseMove: se produit quand le curseur vient sur le composant mouseMoved: même chose que OnMouseMove (écouteur de classe MouseAdapter).

 

Remonter