Java/Swing- Delphi
Les listes déroulantes

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




Introduction

La programmation des listes déroulantes selon Delphi et selon Java-Swing est semblable.

Delphi
Le composant de classe TComboBox de delphi comme le TListBox, contient et permet d'afficher visuellement une liste d'éléments de chaînes parmi  lesquels l'utilisateur peut sélectionner un élément au plus, chaque élément est présent sur une ligne. Ce composant affiche une zone montrant selon les cas l'élément sélectionné ou une zone d'édition(analogue à un Edit).

Tout comme pour les TListBox la propriété objet Items de la classe TComboBox est la propriété centrale de cette classe. Elle sert à stocker les données du TComboBox 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 JComboBox permet 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. Ce composant JComboBox utilise  l'architecture MVC (modèle-vue-contrôleur) de Java ou bien possède des méthodes rendant transparent l'accès à son modèle par défaut. 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 DefaultComboBoxModel

java.lang.Object
  |
  +--javax.swing.AbstractListModel
        |
        +--javax.swing.DefaultComboBoxModel
        |
        +--javax.swing.DefaultListModel
 

(ce modèle doit être créé indépendamment du JComboBox, alors que l'Items du TComboBox est automatiquement créé par l'instanciation du TComboBox). 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 JComboBox. Dans le cas du modèle séparé, toute utlisation du JComboBox doit nécessairement suivre l'un des deux schémas ci-dessous :
 
  • DefaultComboBoxModel  mdc = new DefaultComboBoxModel ( );
  • JComboBox jComboBox1 = new JComboBox( mdc );

  • ou bien
  • DefaultComboBoxModel  mdc = new DefaultComboBoxModel ( );
  • JComboBox jComboBox1 = new JComboBox( );
  • jComboBox1.setModel( mdc );

Un JComboBox au regard de ses données de liste, se comporte comme un JList, nous renvoyons le lecteur au détail de comportement du JList. Comme entre le TListBox et le JList, nous n'aurons donc pas beaucoup de propriétés communes au JComboBox de java et au TComboBox de Delphi.

Nous proposons de signaler ci-dessous les quelques propriété communes au JComboBox de java et au TComboBox de Delphi et surtout les méthodes de manipulation des données de listes de chaînes dans les deux classes.

Propriétés :
 
 
Propriété
TComboBox (Delphi)
JComboBox(Swing)
Changer la police, la      taille ou le style 'Font'
ComboBox1.Font.Name:='Serif';
ou Font.Size pour la taille, Font.Style:=fsItalic;
'setFont'
jComboBox1.setFont( Font.decode("Serif")); ou  pour définir la police, le style et la taille:
jComboBox1.setFont(new java.awt.Font("Serif",1,14));
Nombre maximum d'éléments affichés dans la liste 'DroppedDownCount' (integer)
ComboBox1.DroppedDownCount:=8;
(8 éléments au maximum seront affichés en même temps)
'setMaximumRowCount(int)'
jComboBox1.setMaximumRowCount (8 );
Changer la couleur du       texte  'Font'
ComboBox1.font.Color:='clred';
'Foreground'
jComboBox1.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:'+ComboBox1.Items. Strings[ComboBox1.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.
'getSelectedItem'
jTextField1.setText("a:"+ jComboBox1.getSelectedItem( ));

 


 

Méthodes :

Notations dans le cas de l'utilisation directe de l'architecture MVC :

DefaultComboBoxModel  mdc = new DefaultComboBoxModel ( );
JComboBox jComboBox1 = new JComboBox( mdc );
Nous envisagerons pour le JComboBox, les deux possibilités de modification soit à travers des méthodes liées à l'architecture MVC, soit directement liées au composant (en fait le modèle MVC reste sous-jacent, mais il est rendu transparent au développeur).

Quelques méthodes parmi les plus utiles au départ :
Méthode
TComboBox (Delphi)
rappel : uniquement des données de type string.
JComboBox(Swing)
s'applique au modèle : mdc (cf. ci-haut)
ou bien directement au composant
Ajout d'élément  à la fin de la liste 'Add' : de Items'.
ComboBox1.Items.Add('Element1');
'addElement':permet d'ajouter un  élément à  la liste à travers son modèle MVC :
mdc . addElement("Element1");

'addItem(object)' ajoute directement un  élément à  la liste :
jComboBox1.addItem("Element1");
Effacer la liste 'Clear': de 'Items'.
ComboBox1.Items.Clear;
'clear' ou 'removeAllElements(). A travers son modèle MVC :
mdc.clear( ); ou mdc.removeAllElements( );

'removeAllItems':effacer directement tout les éléments :
jComboBox1.removeAllItems();
Effacer un élément (d'un rang précis 'x') de la liste. 'Delete' : de 'Items'
ComboBox1.Items.Delete(x);
'removeElementAt'. A travers le modèle MVC :
mdc.removeElementAt(x);

'removeItemAt'. Directement :
jComboBox1.removeItemAt(x);
Inserer un élément à un rang précis 'Insert' : de 'Items' .
ComboBox1.Items.Insert(x,'Toto' );
'add'. (modèle MVC)
mdc.add(x,"Toto"); ou 
'insertElementAt'. (modèle MVC)
mdc.insertElementAt("Toto",x);

'InsertElementAt' Directement :
jComboBox1.InsertElementAt("Toto",3);

 

Événements

Classiques et semblables d'un composant à l'autre:
Événement
TComboBox (Delphi)
JComboBox(Swing)
Click dans une liste
déroulante
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. 

actionPerformed: intercepte par défaut le click de souris. A utiliser lorsque l'on veut obtenir par exemple des informations sur la commande d'action associée au bouton (String située dans la propriété ActionCommand). L'écouteur est de classe ActionListener, il reçoit des événements du type ActionEvent. 

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