Objectif : Application simple Java utilisant un objet de classe JList.
- Même exemple, code source en Delphi
Dans cet exemple, malgré l'apparence visuelle fortement semblable du JList et du TListBox Delphi, nous voyons que l'architecture MVC de la bibliothèque swing induit une différence de programmation entre les deux langages.La fenêtre comporte un bouton (JButton jButton1), une liste visuelle (JList jList1), et un éditeur de texte multi-ligne (JTextArea jTextArea1 ):
Voici le diagramme événementiel de l'actions du click de souris sur le bouton jButton1: lorsqu'un élément de la liste est sélectionné, lors du click sur le bouton l'application rajoute cet élément dans la zone de texte.
Schémas UML du projet
En Java (JBuilder)
Comme en java tous les événements sont interceptés par des objets écouteurs, ci-dessous nous donnons les diagrammes UML des classes utilisées par le programme qui est proposé :
Rappelons que la classe Cadre1$1 est une classe anonyme créée lors de la déclaration de l'écouteur du bouton jButton1, Java 2 crée donc dynamiquement un objet écouteur interne (dont la référence n'est pas disponible). Ci-dessous le diagramme jGrasp de la classe anonyme cadre1$1 :
Cadre1$1:
Enfin pour terminer, voici le listing Java/Swing complet de la classe représentant la fenêtre :
package ExempleJList;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class Cadre1 extends JFrame {
JList jList1 = new JList();
JTextArea jTextArea1 = new JTextArea();
JButton jButton1 = new JButton();
DefaultListModel mdl = new DefaultListModel();//Construire le cadre
public Cadre1() {
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}//Initialiser le composant
private void jbInit() throws Exception {
this.getContentPane().setLayout(null);
this.setSize(new Dimension(348, 300));
this.setTitle("Copie d\'une liste vers une zone de texte");
jTextArea1.setBounds(new Rectangle(189, 24, 129, 163));
jButton1.setText("jButton1");
jButton1.setBounds(new Rectangle(34, 219, 272, 35));
jButton1.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(ActionEvent e) {
jButton1_actionPerformed(e);
}
});
jTextArea1.setBounds(new Rectangle(189, 24, 129, 163));
jButton1.setText("jButton1");
this.getContentPane().add(jList1, null);
this.getContentPane().add(jTextArea1, null);
this.getContentPane().add(jButton1, null);
jList1.setModel(mdl); // association du jList1 au modèle:
jList1.setBounds(new Rectangle(17, 22, 130, 165));
// la modification (initialisation) du modèle:
mdl.addElement("un");
mdl.addElement("deux");
mdl.addElement("trois");
mdl.addElement("quatre");
mdl.addElement("cinq");
}//Remplacé (surchargé) pour pouvoir quitter lors de System Close
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if(e.getID() == WindowEvent.WINDOW_CLOSING) {
System.exit(0);
}
}void jButton1_actionPerformed(ActionEvent e) {
jTextArea1.append((String)jList1.getSelectedValue()+"\n"); // ajout de lélément sélectionné
}
}