N0tepad en java

Description

une simple adaptation du notepad windows...avec une fonction de recherche qui j'espère est satisfaisante...le truc c'est que dans ce programme sont utilisées diverses notions (ouverture de fichier, sauvegarde,...recherche style "grep", ...). L'interface est en javax.swing. Ce qui peut servir, n'est pas le programme en lui même, mais les techniques utilisées, pas toujours assimilées pour ceux qui débutent...ce qui est normal...

Source / Exemple :


import java.util.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.filechooser.*;

/**

  • Titre : N0tepad
  • Description : éditeur de texte
  • Copyright : Copyright n0strat0un(c) 2002
  • Société : wesh wesh la nôtre !!
  • @author : n0stra & t0un
  • @version 1.1
  • /
public class N0tepad extends JPanel { static JFrame frame; static JTextArea jta; static JFileChooser fc; static File file; JMenuBar jmb; JMenu jm1; JMenu jm2; JMenu jm3; JMenu jm4; static JMenuItem jmi5; JMenuItem jmi1; JMenuItem jmi2; JMenuItem jmi3; JMenuItem jmi4; JMenuItem jmi6; JMenuItem jmi7; JMenuItem sjm1; JMenuItem sjm2; JCheckBoxMenuItem jmi8; JMenuItem jmi9; JMenuItem jmi10; JMenuItem jmi11; JMenuItem jmi12; //JCheckBoxMenuItem jmi13; String aRecherché; static String nomFenetre = "Sans Titre - N0tepad 1.1"; final static String docHTML = new String("<html>\n<head>\n<title> </title>\n<meta name=\"author\" content=\" \">\n<meta name=\"description\" content=\" \">\n<meta name=\"language\" content=\"FR\">\n<meta name=\"copyright\" content=\" \">\n<meta http-equiv=\"reply-to\" content=\" \">\n</head>\n\n<body background=\" \" bgcolor=\"black\" link=\"gray\" vlink=\"gray\" alink=\"darkgray\" text=\"darkgray\">\n\n\n</body>\n</html>"); Icon nouvo = new ImageIcon("icons/new.gif"); Icon open = new ImageIcon("icons/open.gif"); Icon save = new ImageIcon("icons/save.gif"); static Icon quit = new ImageIcon("icons/fee.gif"); static boolean sauvé = false; //static JCheckBoxMenuItem[] tab_fich_recents = new JCheckBoxMenuItem[5]; //static int index_tab = 0; /** *
  • constructeur de n0tepad
*
  • /
public N0tepad() { //création de la barre de menus jmb = new JMenuBar(); jm1 = new JMenu("Fichier"); jm3 = new JMenu("Edition"); jm4 = new JMenu("Recherche"); jm2 = new JMenu("?"); jmi1 = new JMenu("Nouveau"); sjm1 = new JMenuItem("Document texte", nouvo); sjm2 = new JMenuItem("Document HTML", nouvo); jmi2 = new JMenuItem("Ouvrir..", open); jmi3 = new JMenuItem("Sauvegarder", save); jmi4 = new JMenuItem("Sauvegarder sous..", save); jmi5 = new JMenuItem("Quitter"); jmi6 = new JMenuItem("A propos.."); jmi7 = new JMenuItem("Sélectionner tout"); jmi10 = new JMenuItem("Copier"); jmi11 = new JMenuItem("Couper"); jmi12 = new JMenuItem("Coller"); jmi8 = new JCheckBoxMenuItem("Retour à la ligne automatique"); jmi9 = new JMenuItem("Rechercher.."); jmi1.add(sjm1); jmi1.add(sjm2); jmb.add(jm1); jmb.add(jm3); jmb.add(jm4); jmb.add(jm2); jm1.add(jmi1); jm1.add(jmi2); jm1.add(jmi3); jm1.add(jmi4); jm1.addSeparator(); jm1.add(jmi5); //jm1.addSeparator(); //jm1.add(jmi13); jm2.add(jmi6); jm3.add(jmi10); jm3.add(jmi11); jm3.add(jmi12); jm3.addSeparator(); jm3.add(jmi7); jm3.addSeparator(); jm3.add(jmi8); jm4.add(jmi9); //initialisation de la boite d'ouverture fc = new JFileChooser(); this.setLayout(new BorderLayout(5, 5)); //création de la zone d'affichage de texte jta = new JTextArea(30, 60); jta.setEditable(true); //création du panneau "ajustable" JScrollPane jsp = new JScrollPane(jta); jsp.setBorder(BorderFactory.createLineBorder(Color.darkGray, 3)); //ajout d'auditeurs aux boutons /**Sélectionner tout**/ jmi7.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jta.selectAll(); } }); /**retour à la ligne auto**/ jmi8.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (jmi8.getState() == true) jta.setLineWrap(true); else jta.setLineWrap(false); } }); /**nouveau document texte**/ sjm1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jta.selectAll(); jta.replaceSelection(""); file = new File("sanstitre.txt"); String nomFrame = nomFenetre; frame.setTitle(nomFrame); frame.repaint(); sauvé = false; } }); /**nouveau document HTML**/ sjm2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jta.selectAll(); jta.replaceSelection(docHTML); file = new File("sanstitre.html"); String nomFrame = nomFenetre; frame.setTitle(nomFrame); frame.repaint(); sauvé = false; } }); /**ouverture**/ jmi2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int choix = fc.showOpenDialog(frame); //affichage d'une fenêtre "d'ouverture" if(choix == fc.APPROVE_OPTION) { file = fc.getSelectedFile(); //récupère le fichier sélectionné ouverture(file); String nomFrame = file.getName()+" - N0tepad 1.1"; frame.setTitle(nomFrame); /*if(index_tab == 5) { index_tab = 0; tab_fich_recents[index_tab] = new JCheckBoxMenuItem(file.getName()); jmi13 = tab_fich_recents[index_tab]; /**fichiers recents**/ /*jmi13.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(jmi13.isSelected()) { File fichier = new File(jmi13.getName()); ouverture(fichier); } } }); index_tab += 1; jm1.add(jmi13); } else { tab_fich_recents[index_tab] = new JCheckBoxMenuItem(file.getName()); jmi13 = tab_fich_recents[index_tab]; /**fichiers recents**/ /*jmi13.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(jmi13.getState() == true) { File fichier = new File(jmi13.getText()); ouverture(fichier); } } }); index_tab += 1; jm1.add(jmi13); }*/ } frame.repaint(); } }); /**copier**/ jmi10.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jta.copy(); frame.repaint(); } }); /**couper**/ jmi11.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jta.cut(); frame.repaint(); } }); /**coller**/ jmi12.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { jta.paste(); frame.repaint(); } }); /**sauvegarder**/ jmi3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (file == null) { int choix = fc.showSaveDialog(frame); //affichage d'une fenêtre "de fermeture" if(choix == fc.APPROVE_OPTION) { File fichier = fc.getSelectedFile(); //récupère le fichier sélectionné sauvegarde(fichier); } } else sauvegarde(file); frame.repaint(); } }); /**sauvegarder sous**/ jmi4.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int choix = fc.showSaveDialog(frame); //affichage d'une fenêtre "de fermeture" if(choix == fc.APPROVE_OPTION) { File fichier = fc.getSelectedFile(); //récupère le fichier sélectionné sauvegarde(fichier); } frame.repaint(); } }); /**à propos**/ jmi6.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null, "N0tepad 1.1\nEditeur de texte en Java\n\nversion 1.1", "A propos de N0tepad 1.1", -1); } }); /**rechercher**/ jmi9.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(file != null) { Recherche recherche = new Recherche(file); } } }); //mise en place des panneaux intermédiaires this.add(jsp, BorderLayout.CENTER); this.add(jmb, BorderLayout.NORTH); } /** *
  • méthode qui met en place les marges
*
  • @return insets la valeur des marges(h, b, g, d)
  • /
public Insets getInsets() { return new Insets(5, 5, 5, 5); } /** *
  • méthode d'affichage du fichier à ouvrir
*
  • @param f fichier à ouvrir
*
  • /
public void ouverture(File f) { //efface la zone de texte jta.selectAll(); jta.replaceSelection(""); try { //tampon de lecture BufferedReader bfreader = new BufferedReader(new FileReader(f)); //lecture d'une ligne String s = bfreader.readLine(); while(s != null) { //affichage de la ligne lue jta.append(s+"\n"); //lire une nouvelle ligne s = bfreader.readLine(); } //fermeture du tampon bfreader.close(); sauvé = false; } catch(Exception e) { System.err.println("ba ya blême"); } } /** *
  • méthode d'écriture du fichier
*
  • @param f fichier à écrire
*
  • /
public static void sauvegarde(File f) { try { //tampon d'écriture BufferedWriter bfwriter = new BufferedWriter(new FileWriter(f)); /* écriture du texte (jta.getText()) à partir du rang 0 jusqu'à (jta.getText().length()), longueur du texte à copier */ bfwriter.write(jta.getText(), 0, jta.getText().length()); //fermeture du tampon d'écriture bfwriter.close(); sauvé = true; } catch(Exception e) { System.err.println("ba ya blême"); } } /** *
  • méthode principale
*
  • /
public static void main(String[] args) { //création de la fenêtre d'affichage du n0tepad frame = new JFrame(nomFenetre); frame.setResizable(true); //création du n0tepad N0tepad essai = new N0tepad(); //ajout du n0tepad à la fenêtre frame.getContentPane().add(essai); //ajout d'un auditeur de fermeture de la fenêtre frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { if ((file != null) && (!sauvé)) { int saveOrNot = JOptionPane.showConfirmDialog(new JFrame(), "Quitter sans sauvegarder?", "Quitter", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, quit); if(saveOrNot == JOptionPane.YES_OPTION) System.exit(0); if(saveOrNot == JOptionPane.NO_OPTION) { int choix = fc.showSaveDialog(frame); //affichage d'une fenêtre "de fermeture" if(choix == fc.APPROVE_OPTION) { File fichier = fc.getSelectedFile(); //récupère le fichier sélectionné sauvegarde(fichier); } frame.repaint(); System.exit(0); } if(saveOrNot == JOptionPane.CANCEL_OPTION) ; } else System.exit(0); } }); /**quitter**/ jmi5.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if ((file != null) && (!sauvé)) { int saveOrNot = JOptionPane.showConfirmDialog(new JFrame(), "Quitter sans sauvegarder?", "Quitter", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, quit); if(saveOrNot == JOptionPane.YES_OPTION) System.exit(0); if(saveOrNot == JOptionPane.NO_OPTION) { int choix = fc.showSaveDialog(frame); //affichage d'une fenêtre "de fermeture" if(choix == fc.APPROVE_OPTION) { File fichier = fc.getSelectedFile(); //récupère le fichier sélectionné sauvegarde(fichier); } frame.repaint(); System.exit(0); } if(saveOrNot == JOptionPane.CANCEL_OPTION) ; } else System.exit(0); } }); //affichage de la fenêtre et donc du n0tepad frame.pack(); frame.setVisible(true); } } ____________________________________________________________________________ ____________________________________________________________________________ import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; import java.io.*; public class Recherche { JFrame frame; JPanel pannoRech; JPanel inter2; JLabel labRech; JTextField jtf; JPanel boutons; JButton ok; JButton annuler; JButton visu; JList resultat; JScrollPane scrollRech; Vector res; //Vector dep = new Vector(); //Vector arr = new Vector(); File fichier; //int depart; //int arrivee; BufferedReader bfr; int numero = 0; public Recherche(File f) { fichier = f; frame = new JFrame("Rechercher..."); frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); frame.setResizable(false); frame.setLocation(300, 150); pannoRech = new JPanel(new BorderLayout(5, 5)); inter2 = new JPanel(new FlowLayout()); labRech = new JLabel("Rechercher : "); jtf = new JTextField(20); boutons = new JPanel(new GridLayout(3, 1, 10, 5)); ok = new JButton("Ok"); annuler = new JButton("Annuler"); visu = new JButton("Visualiser"); visu.setEnabled(false); res = new Vector(); resultat = new JList(res); scrollRech = new JScrollPane(resultat); inter2.add(labRech); inter2.add(jtf); boutons.add(ok); boutons.add(annuler); boutons.add(visu); pannoRech.add(inter2, BorderLayout.CENTER); pannoRech.add(boutons, BorderLayout.EAST); frame.getContentPane().setLayout(new BorderLayout(5, 5)); frame.getContentPane().add(pannoRech, BorderLayout.NORTH); frame.getContentPane().add(scrollRech, BorderLayout.CENTER); frame.pack(); frame.setVisible(true); annuler.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { frame.setVisible(false); } }); visu.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //String rechInter = (String)resultat.getSelectedValue(); //StringTokenizer tok = new StringTokenizer(rechInter, ","); //N0tepad.jta.select(Integer.parseInt(tok.nextToken()), Integer.parseInt(tok.nextToken(" ").substring(1))); //N0tepad.jta.select(Integer.parseInt((String)dep.get(place)), Integer.parseInt((String)arr.get(place))); //place += 1; } }); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { res.removeAllElements(); numero = 0; resultat.updateUI(); try { if(!jtf.getText().equals("")) rechercherUneChaine(jtf.getText(), fichier); } catch(FileNotFoundException fnfe) { System.err.print("filenotfound prob !!"); } catch(IOException ioe) { System.err.print("io prob !!"); } } }); jtf.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { res.removeAllElements(); numero = 0; resultat.updateUI(); try { if(!jtf.getText().equals("")) rechercherUneChaine(jtf.getText(), fichier); } catch(FileNotFoundException fnfe) { System.err.print("filenotfound prob !!"); } catch(IOException ioe) { System.err.print("io prob !!"); } } }); } public void rechercherUneChaine(String s, File f) throws IOException, FileNotFoundException { frame.setTitle("Recherche de \" "+s+" \""); bfr = new BufferedReader(new FileReader(f)); String ligne = bfr.readLine(); int index; try { while( ligne != "" ) { index = ligne.indexOf(s); numero += 1; if(index != -1) { res.addElement(numero+","+index+" : "+ligne); } ligne = bfr.readLine(); } } catch(NullPointerException npe) {} jtf.selectAll(); jtf.setText(""); if (!res.isEmpty()) visu.setEnabled(true); else visu.setEnabled(false); resultat.updateUI(); boutons.updateUI(); } }

Conclusion :


pas de mises a jour prévue...si vous rencontrez des problèmes, parce qu'il y en a...vous pouvez me contacter...

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (n0stra)