lundi 4 mars 2019

JList (1) : un premier exemple simple

Ce code présente un exemple très simple pour créer et ajouter des éléments à une JList.

Ce code a été créé comme un premier code dans une (petite) série pour mettre l'accent sur l'utilisation des modèles tels que définis par  l'approche MVC, cette dernière qui est respectée par les composants Swing en comparaison avec les composants AWT.

Si la manipulation du modèle (donnée) associé à un composant simple comme JTextField, ce n'est pas de même pour les composants qui affichent plusieurs données tels que JComboBox, JList et JTable.

Dans cette série, JList sera choisie pour démontrer quelques fonctionnalités.

Dans cet premier code, une JList est créé en se basant sur DefaultListModel. En effet, les différents modèles sont disponibles comme des interfaces.


Pour simplifier leur utilisation (garantir les fonctionnalités de base communes), une classe abstraite qui implémente le minimum des fonctionnalités est livrée. Cela est valide pour tous les modèles des données pour les autres composants. Pour le cas de la JList, la classe abstraite est AbstractListModel :


Néanmoins, l'interface et la classe abstraite ne donnent aucune implémentation réelle qui supportent la sauvegarde des données et qui est prête pour être utilisée. C'est pourquoi, une implémentation par défaut est livrée. Cela aussi est valide pour les autres modèles des données des autres composants Swing. Pour la JList, la classe par défaut est DefaultListModel (c'est très explicit comme noms de classes) :


Cette dernière utilise un Vector pour stocker les données :

private Vector delegate = new Vector();


Le code suivant, montre comment créer une JList avec un DefaultListModel. Le code de création des autres composants graphiques est séparé. Le bouton permet d'ajouter la valeur saisie dans le champs à la liste (à gauche) :

Code source :


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class ExempleSimpleJList extends JFrame implements ActionListener {
 
 JList liste;
 DefaultListModel modele;
 
 JLabel lblNouveau;
 JTextField txtNouveau;
 JButton btnAjouter;
 JPanel pnlAjouter;
 
 public ExempleSimpleJList(){
  
  setTitle("Exemple Simple JList");
  setSize(800, 400);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
  modele = new DefaultListModel();
  liste = new JList(modele);
  
  creerFormulaire();
  
  getContentPane().add(pnlAjouter, BorderLayout.CENTER);
  getContentPane().add(new JScrollPane(liste), BorderLayout.WEST);
  
 }
 
 public void actionPerformed(ActionEvent e){
  modele.addElement(txtNouveau.getText());
 }
 
 public void creerFormulaire(){
  
  lblNouveau = new JLabel("Nouveau Element :");
  lblNouveau.setBounds(20, 20, 150, 30);
  txtNouveau = new JTextField();
  txtNouveau.setBounds(190, 20, 150, 30);
  btnAjouter = new JButton("Ajouter");
  btnAjouter.setBounds(20, 70, 150, 30);
  btnAjouter.addActionListener(this);
  
  pnlAjouter = new JPanel();
  pnlAjouter.setLayout(null);
  pnlAjouter.add(lblNouveau);
  pnlAjouter.add(txtNouveau);
  pnlAjouter.add(btnAjouter);
  
 }
 
 public static void main (String args[]) {
  
  (new ExempleSimpleJList()).setVisible(true);
 }
}

Résultat :