Objectif : Application simple Java utilisant deux objets de classe JComboBox.
- Même exemple, code source en Delphi
Dans cet exemple, nous utilisons deux JComboBox, le premier est chargé grâce à l'architecture MVC de la bibliothèque swing, le second directement à travers sa méthode addItem .La fenêtre comporte deux bouton (JButton jButton1 et jButton2), deux listes déroulantes (JComboBox jComboBox1 et jComboBox2 ), 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 les classes Cadre1$1 et Cadre1$2 sont des classes anonymes créées lors de la déclaration de l'écouteur des boutons jButton1 et jButton2, Java 2 crée donc dynamiquement un objet écouteur interne (dont la référence n'est pas disponible). Ci-dessous les diagrammes jGrasp des classes anonymes cadre1$1 et Cadre1$2 :
Cadre1$1:
![]()
Cadre1$2:
![]()
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 {
DefaultComboBoxModel mdc = new DefaultComboBoxModel();
JComboBox jComboBox2 = new JComboBox();
JComboBox jComboBox1 = new JComboBox();
JTextArea jTextArea1 = new JTextArea();
JButton jButton1 = new JButton();
JButton jButton2 = new JButton();//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(343, 253));
this.setTitle("Listes déroulantes en Java/Swing");
jTextArea1.setBounds(new Rectangle(180, 15, 127, 101));
jButton1.setText("jButton1");
jButton1.setBounds(new Rectangle(24, 142, 272, 28));// Ecouteur de jButton1 en classe anonyme :
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton1_actionPerformed(e);
}
});jComboBox2.setBounds(new Rectangle(21, 92, 130, 25));
jComboBox1.setBounds(new Rectangle(19, 36, 129, 23));
jComboBox1.setModel(mdc); // la première liste déroulante est dirigée par son modèle MVC
jButton2.setText("jButton2");
jButton2.setBounds(new Rectangle(23, 184, 274, 30));// Ecouteur de jButton2 en classe anonyme :
jButton2.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(ActionEvent e) {
jButton2_actionPerformed(e);
}
});this.getContentPane().add(jComboBox1, null);
this.getContentPane().add(jComboBox2, null);
this.getContentPane().add(jTextArea1, null);
this.getContentPane().add(jButton2, null);
this.getContentPane().add(jButton1, null);// Le modèle MVC de la première liste déroulante :
mdc.addElement("un_1");
mdc.addElement("deux_1");
mdc.addElement("trois_1");
mdc.addElement("quatre_1");// La seconde liste déroulante est chargée directement :
jComboBox2.addItem("un_2");
jComboBox2.addItem("deux_2");
jComboBox2.addItem("trois_2");
jComboBox2.addItem("quatre_2");
}//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)jComboBox1.getSelectedItem()+"\n");
}void jButton2_actionPerformed(ActionEvent e) {
jTextArea1.append((String)jComboBox2.getSelectedItem()+"\n");
}
}