Java, objets, interfaces et Internet
TD 6

Un éditeur de texte

Le but de ce TP est de programmer un éditeur de texte. Les classes de cette application font partie du paquet editeur. Il y a une classe modèle ModeleEditeur, une classe vue VueEditeur, plusieurs classes de contrôle et une classe de lancement Editeur.

class Editeur {

  public static void main(String[] args) {
    ModeleEditeur modele = new ModeleEditeur(args);

    modele.vue.pack();
    modele.vue.setVisible(true);
  }
}

Le modèle a un champ vue et des champs nomFichier et nomRépertoire, et des méthodes ouvrir(), écrire(), sauvegarder() correspondant aux principales fonctions d'un éditeur :

class ModeleEditeur {

  VueEditeur vue;
  String nomFichier, nomRepertoire;

  ModeleEditeur(String[] args) {
    vue = new VueEditeur(this);
  }

  void ouvrir() throws IOEXception { ... }

  void écrire() throws IOEXception { ... }

  void sauvegarder() throws IOEXception { ... }

  void quitter() {
    System.exit(0);
  }
}
	

Ouvrir un fichier doit provoquer la création d'une fenêtre de dialogue pour sélectionner un fichier, cette fenêtre étant un champ de la vue :

    vue.dialogue = 
      new FileDialog(vue, "Ouvrir Fichier ...", FileDialog.LOAD);
    vue.dialogue.show();
	
Les noms du répertoire et du fichier sélectionnés sont obtenus par les méthodes getDirectory() et getFile() appliqué à l'objet vue.dialogue. On lit ensuite le contenu du fichier et on l'affiche dans le champ texte de la vue par :

	File fichier = new File(nomRepertoire, nomFichier);
	FileReader in = new FileReader(fichier);
	char[] data = new char[(int)fichier.length()];
	in.read(data);
	vue.texte.setText(new String(data));
	in.close();
	

L'écriture ("sauvegarder sous") fonctionne de façon analogue, avec

	File fichier = new File(nomRepertoire, nomFichier);
	FileWriter out = new FileWriter(fichier);
	out.write(vue.texte.getText());
	out.close();
	

La vue est un JFrame ; le modèle en est un champ. Les autres champs sont les composants graphiques : une barre de menus JMenuBar menus, un menu JMenu fichiers, des éléments de menu JMenuItem ouvrir, sauvegarder, écrire, quitter, une fenêtre de dialogue FileDialog dialogue et une zone d'édition de texte JTextArea texte. Le constructeur doit initialiser le modèle et créer tous ces éléments et les ajouter à la vue ; par exemple :

  VueEditeur(ModeleEditeur modele) {
    super("Editeur");

    this.modele = modele;
    menus = new JMenuBar();
    fichiers = new JMenu("Fichier");
    ouvrir = new JMenuItem("Ouvrir");
    fichiers.add(ouvrir);
    menus.add(fichiers);
    this.setJMenuBar(menus);

    texte = new JTextArea(10, 80);
    cp.add("Center", texte);
  }
}

Il y a un contrôleur pour chaque type d'événements.

class ControleurDocument implements DocumentListener { ... }

class ControleurAction implements ActionListener { ... }

class ControleurClavier implements KeyListener { ... }

class ControleurFenetre implements WindowListener {
  ModeleEditeur modele;

  ControleurFenetre(ModeleEditeur modele) { ... }

  public void windowClosing(WindowEvent e) {
    modele.quitter();
  }
  public void windowOpened(WindowEvent e) {}
  public void windowClosed(WindowEvent e) {}
  public void windowIconified(WindowEvent e) {}
  public void windowDeiconified(WindowEvent e) {}
  public void windowActivated(WindowEvent e) {}
  public void windowDeactivated(WindowEvent e) {}
}

Les actions sont contrôlées au moyen de la méthode suivante :

  public void actionPerformed(ActionEvent event) {
    if (event.getSource() == vue.ouvrir) {
      modele.ouvrir();
    } else if (event.getSource() == vue.écrire) {
       ...
    } else if ...
  }

Les modifications faites au document


[Cours Java]

Mise à jour :