Interfaces Graphiques en Java
TD 5

Modèle, vue et controleur.

Exercice 1 : Liste et modèle

Dans un premier temps, dans une fenêtre, nous cherchons à afficher la liste des arguments de la ligne de commande dans une JList.

  public class Test extends JFrame {
    public Test(Object[] values) {

      JList list=new JList(value);

      JPanel panel=new JPanel();
      panel.add(list);

      setContentPane(panel);
    }

    public static void main(String[] args) {
      JFrame frame=new Text(args);
      frame.setSize(300,200);
      frame.show();
    }
  }
 
Changer le code ci-dessus, pour utiliser un modèle de liste.
Pour cela, créée une classe implémentant ListModel en héritant de AbstractListModel et en redéfinissant les méthodes getElementAt() et getSize().
Puis utiliser le constructeur JList(ListModel) pour créer une list ayant pour modèle la classe crée ci-dessus.

Dans un second temps, on cherche à ajouter un checkbox permettant de trier l'intérieur de la JList par ordre croissant ou décroissant. Ajouter une méthode sort(boolean order) au modèle de liste créé précédemment (L'implémentation pourra utiliser les méthodes Arrays.sort() et Collections.reverseOrder()).
Ajouter un bouton à cocher (JCheckbox) qui va trier la liste et demander à la vue (la JList) de se redessiner.


Exercice 2: ComboBox et modèle

Remplacer dans l'exercice précédent la JList par un JComboBox. Le modèle à utiliser sera alors le ComboBoxModel.


Exercice 3: Navigateur d'un système de fichiers

On désire écrire un programme de visualisation de l'arborescence de fichiers d'un répertoire donné (par exemple, le home dir).

Pour cela, on choisit de définir la classe FileNode représentant les noeuds d'une arborescence correspondant à des répertoires ou à des fichiers. Cette classe devra donc implanter l'interface TreeNode, afin d'être utilisée dans un composant JTree.

De plus, il n'est pas souhaitable que l'ensemble de l'arborescence soit chargée au départ. On préfèrera, autant que possible, un chargement dynamique, à la demande, lors du déplacement dans la hierarchie et de l'ouverture des répertoires.

Par ailleurs, dans un champ de texte en bas de la fenêtre, on veut visualiser le chemin absolu (dans le système de fichier considéré) du fichier ou du répertoire sélectionné.

Par exemple, voici une exécution de java -Dhome.dir=/home/web/www/ Repertoire

Exemple de
navigateur simple

On pourra également faire afficher une fenêtre d'alerte lorsque la lecture d'un répertoire pose un problème (protection en lecture ou erreur quelconque d'entrée/sortie).

Parmi les améliorations souhaitables, on peut citer:


Rémi Forax 2002 Université de Marne la Vallée