mur-47 | Bonjour,
Je suis étudiant en informatique, et nous avons pour projet de programmer un éditeur de texte soi-même. Jusqu'à présent, j'ai réussi à ouvrir un éditeur à peu près correct. La prochaine étape, c'est d'ajouter un "*" à la fin du nom du texte lorsque celui-ci est modifié.
Et c'est là que deux problèmes se posent : D'une part, le texte d'origine du départ est le seul à accepter les modifications (normalement, si j'écris sur un texte ou si j'en supprime une partie, il est censé écrire "insertion" ou "suppression" dans le terminal). Quand j'ouvre un autre texte, celui-ci ne prend même pas en compte les modifications.
Le deuxième problème, je ne le comprend pas : J'ai un NullPointerException au tout début de l'exécution du programme. Mais étrangement, ça ne lui fait rien, il marche quand même. Il peut ouvrir les textes situés dans le même répertoire. En revanche, si le fichier est situé dans un autre répertoire, il me répond "lireFichierDuDisque:PB Fichierjava.io.FileNotFoundException: readme.txt (No such file or directory)"
Voilà... Je tourne en rond depuis hier soir sans trouver la faute. Donc, si jamais l'un de vous peut me la signaler, ce serait génial. Je vous transmets le code source :
Code :
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- import javax.swing.event.*;
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileFilter;
- import java.io.FileReader;
- import java.io.FileWriter;
- import javax.swing.filechooser.FileNameExtensionFilter;
- import javax.swing.text.BadLocationException;
- import javax.swing.text.PlainDocument;
- public class Version1 extends JFrame implements ActionListener//, ItemListener
- {
- private JMenuItem item1MenuFichier;
- private JMenuItem item2MenuFichier;
- private JMenuItem item3MenuFichier;
-
- private JTextArea jtArea;
-
- private String texte;
-
- private boolean modifie=false;
- public Version1()
- {
- setTitle("Version1" );
- setLocation(50, 50);
- setSize(300, 400);
- // l'ensemble du menu
- JMenuBar menuBar = new JMenuBar();
- // un element de la barre de menu
- JMenu menuFichier = new JMenu("Fichier" );
-
- // les items du menu fichier
- item1MenuFichier = new JMenuItem("Enregistrer" );
- item1MenuFichier.addActionListener(this);
- item2MenuFichier = new JMenuItem("Ouvrir" );
- item2MenuFichier.addActionListener(this);
- item3MenuFichier = new JMenuItem("Quitter" );
- item3MenuFichier.addActionListener(this);
-
- // ajouts des items au menu correspondant
- menuFichier.add(item1MenuFichier);
- menuFichier.addSeparator();
- menuFichier.add(item2MenuFichier);
-
- menuFichier.add(item3MenuFichier);
- // ajout du menu 'Fichier' a la barre de menu
- menuBar.add(menuFichier);
- // lien du menu a la Frame
- setJMenuBar(menuBar);
-
- // abonnement aux evenements de gestion de la fenetre
- addWindowListener(new WindowAdapter()
- {
- public void windowClosing(WindowEvent evt)
- {
- System.exit(0);
- }
- } );
-
- // creation du document texte
- PlainDocument document = new PlainDocument();
-
- String strTest = "Bonjour à tous !";
-
- // ajout d'un contenu
- try
- {
- document.insertString(0, strTest, null);
- } catch (BadLocationException e)
- {
- e.printStackTrace();
- }
-
- // creation d'IHM texte
- jtArea = new JTextArea(document);
-
- // le parametrage de JTextArea n'est pas obligatoire
- /*
-
- // on coupe les lignes
- jtArea.setLineWrap(true);
-
- // les lignes sont coupees apres les mots
- jtArea.setWrapStyleWord(true);
-
- // choix de la police utilisee pour TOUT le document
- jtArea.setFont(new Font(Font.MONOSPACED, Font.ITALIC, 24));
- */
-
- // ajout de l'ascenseur (si le texte est trop long)
- JScrollPane scrollPane = new JScrollPane(jtArea);
- add(scrollPane);
- jtArea.getDocument().addDocumentListener(new MyDocumentListener());
- lireFichierDuDisque(texte);
- ecrireFichierSurDisque(texte);
- setVisible(true);
- }
- class MyDocumentListener implements DocumentListener
- {
-
- public void changedUpdate(DocumentEvent e)
- {
-
- }
- public void insertUpdate(DocumentEvent e)
- {
- System.out.println("Insertion de texte" );
- modifie=true;
- }
- public void removeUpdate(DocumentEvent e)
- {
- System.out.println("Suppression de texte" );
- modifie=true;
- }
-
- }
- public void actionPerformed(ActionEvent e)
- {
-
- if(e.getSource()==item1MenuFichier)
- {
- System.out.println("Enregistre" );
- }
- if(e.getSource()==item2MenuFichier)
- {
- JFileChooser chooser = new JFileChooser();
- FileNameExtensionFilter filter = new FileNameExtensionFilter("fichier","txt", "java" );
- chooser.setFileFilter(filter);
-
- chooser.setApproveButtonText("Choix du fichier..." ); //intitule du bouton
- //chooser.showOpenDialog(null); //affiche la boite de dialogue
- if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
- {
- //jtArea.setText(chooser.getSelectedFile().getAbsolutePath());
- String nom=chooser.getSelectedFile().getName();
- String chemin=chooser.getSelectedFile().getAbsolutePath();
- setTitle(nom);
- System.out.println(nom);
- System.out.println(chemin);
- lireFichierDuDisque(chooser.getSelectedFile().getName());
- if(modifie==true)
- {
- setTitle(nom+"*" );
- }
-
- //si un fichier est selectionné, récupérer le fichier puis son path et l'afficher dans le champs de texte
- }
- else
- {
- System.out.println("Annuler" );
- }
- }
- if(e.getSource()==item3MenuFichier)
- {
- System.out.println("Quitter" );
- System.exit(0);
- }
- }
-
- private void lireFichierDuDisque(String nomFichier)
- {
- try
- {
- // ouvrir le fichier
- BufferedReader bf= new BufferedReader(new FileReader(nomFichier));
- jtArea.read(bf,jtArea);
- bf.close();
- }
- catch(Exception e)
- {
- System.out.println("lireFichierDuDisque:PB Fichier" + e);
- }
- }
- private void ecrireFichierSurDisque(String nomFichier)
- {
- try
- {
- BufferedWriter bw = new BufferedWriter(new FileWriter(nomFichier));
- jtArea.write(bw);
- bw.close();
- }
- catch(Exception e)
- {
- System.out.println("ecrireFichierSurDisque:PB Fichier" + e);
- }
- }
- public static void main(String [] arg)
- {
- new Version1();
- }
- }
|
Merci d'avance ! ^^
|