[Java] Editeur de Texte

Editeur de Texte [Java] - Java - Programmation

Marsh Posté le 04-02-2005 à 17:32:35    

Bonjour,
 
je suis en train de me programmer un petit éditeur de texte (genre bloc-notes), qui marche bien mais est assez simple et je voudrais l'améliorer.
Il est composé de 4 JButtons (ouvrir, enregistrer sous, enregistrer et quitter) et un JScrollPane.
 
Déjà, j'ai un problème avec la JTextArea (qui est incluse dans un JScrollPane): je voudrais qu'elle s'adapte à la taille de la fenêtre.
On m'a dit qu'il fallait que je gère les évenements sur la taille du cadre, mais quel Listener implanter? et surtout où?
 
De plus, concernant le JFileChooser (pour ouvrir et enregistrer sous), je voudrais qu'il s'ouvre sur un repertoire précis et qu'il ne m'affiche que les fichiers Text (et les répertoires), comment faire?
 
Et aussi, je cherche un bon éditeur Java sous Linux.
 
Merci beaucoup.

Reply

Marsh Posté le 04-02-2005 à 17:32:35   

Reply

Marsh Posté le 04-02-2005 à 17:43:30    

tu donnes un BorderLayout comme layoutManager au contentPane de ta frame et au momment du add() du scrollpane, tu lui passes BorderLayout.CENTER comme deuxième paramètre. Va lire le tutorial sur les layoutManager :
http://java.sun.com/docs/books/tut [...] ng/layout/
 
concernant le filechooser, tout est là :
http://java.sun.com/docs/books/tut [...] ooser.html

Reply

Marsh Posté le 04-02-2005 à 17:51:28    

Merci pour les liens  :)  
Le FileChooser ça devrait aller
 

nraynaud a écrit :

tu donnes un BorderLayout comme layoutManager au contentPane de ta frame et au momment du add() du scrollpane, tu lui passes BorderLayout.CENTER comme deuxième paramètre.


 
Voila ce que j'ai tapé pour creer le JScrollPane
 

Code :
  1. texte=new JTextArea(20,30);
  2. texte.setLineWrap(true);
  3. scroll=new JScrollPane(texte);
  4. JPanel PanneauCentre=new JPanel();
  5. PanneauCentre.add(scroll);
  6.      
  7.      
  8. setLayout(new BorderLayout());
  9. add(PanneauNord,BorderLayout.NORTH);
  10. add(PanneauCentre,BorderLayout.CENTER);


 
Mais quand j'agrandis la taille de la fenêtre de l'éditeur, la JTextArea garde sa taille de (20,30), et moi je voudrais que la zone de texte s'adapte à la taille du cadre entier.
 

Reply

Marsh Posté le 04-02-2005 à 17:56:58    

oui, vire les arguments du texte=new JTextArea(20,30);  
en faisant ça, tu dis que la taille préférée du textArea est de 20 colones et 30 lignes, donc pas la peine de redimmentionner si ces 20 colones et 30 lignes sont visibles.
 

Reply

Marsh Posté le 04-02-2005 à 18:19:26    

si tu cherches des idées t'as la demo de sun :
 
jdk1.5.0_01\demo\jfc\Notepad

Reply

Marsh Posté le 05-02-2005 à 12:09:59    

je te recommande aussi de jeter un coup d'oeil au JEdit TextArea, dont les sources de la V21 sont dipso sur sourceforge...c un textArea qui gère la coloration syntaxique...Et qu'on peut facilement upgrader pour qu'il gère les undo/redo, la numérotation des lignes, le magic carret, et autre


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 05-02-2005 à 12:33:45    

Jubi > oué comme un textArea de base quoi.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 06-02-2005 à 00:46:40    

Merci :)
 
Quand j'enlève les arguments, le JTextArea devient tout petit.

Reply

Marsh Posté le 06-02-2005 à 20:03:45    

oui il a des soucis de taille...mais un jscrollPane et hop !!


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 08-02-2005 à 13:03:09    

J'ai déjà mis un JScrollPane ;)
C'est impossible d'avoir une zone de texte qui s'adapte à la taille de la fenêtre?


Message édité par arrau le 08-02-2005 à 13:03:41
Reply

Marsh Posté le 08-02-2005 à 13:03:09   

Reply

Marsh Posté le 08-02-2005 à 13:34:50    

Ben si avec un layout.
Style en mettant ça dans le center d'un borderlayout. (comme dit par nraynaud au second post du topic)

Reply

Marsh Posté le 08-02-2005 à 21:01:53    

Mais j'ai mis mon JScrollPane au centre d'un borderlayout ^^

Reply

Marsh Posté le 09-02-2005 à 00:23:05    

ben je sais pas moi je l'ai utilisé cet été avec un layout et dans un jscrollpane et ca a très bien marché...


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 09-02-2005 à 09:45:05    

Je dois mal m'expliquer à mon avis :)
 
Quand j'ouvre mon éditeur, ça donne ça:
http://site.voila.fr/arraudyn/Editeur1.JPG
 
 
Quand j'agrandis, ça:
http://site.voila.fr/arraudyn/editeur2.JPG
 
Je voudrais que lorsque j'agrandis, la zone de texte prenne la taille de la fenêtre (comme le notepad de windows).

Reply

Marsh Posté le 09-02-2005 à 09:52:56    

Alt+Impr Ecran pour ne capturer qu'une seul fenêtre  :whistle:
 
Plus sérieusement, il ne faut pas que tu fasse un BorderLayout a mon avis...
Penche toi sur un GridBagLayout
C'est le plus chiant des Layout mais ca marchera!
 

Code :
  1. /** */
  2. private GridBagConstraints gbc;
  3. /** */
  4. private GridBagLayout gbl;
  5. private void initGbc(int x,int y,int gw,int gh,int wx,int wy) {
  6.  gbc.gridx = x;
  7.  gbc.gridy = y;
  8.  gbc.gridwidth = gw;
  9.  gbc.gridheight = gh;
  10.  gbc.weightx = wx;
  11.  gbc.weighty = wy;
  12. }
  13. ....
  14.  initGbc(0,0,1,1,100,100);
  15.  this.gbl.setConstraints(tonTextArea,this.gbc);
  16.  gbc.fill = GridBagConstraints.BOTH; // il force l'agrandissement dans tous le container: horizontalement et verticalement
  17.  gbc.anchor = GridBagConstraints.CENTER;
  18.  this.getContentPane().add(tonTextArea);
  19. ....


 
si ca ne suffis pas, tu peux toujours appelé doLayout() (je croix que c'est ca) dans la méthode repaint...


Message édité par rompi le 09-02-2005 à 10:02:36
Reply

Marsh Posté le 09-02-2005 à 10:08:20    

arrau a écrit :

Je dois mal m'expliquer à mon avis :)
 
Quand j'ouvre mon éditeur, ça donne ça:
http://site.voila.fr/arraudyn/Editeur1.JPG
 
 
Quand j'agrandis, ça:
http://site.voila.fr/arraudyn/editeur2.JPG
 
Je voudrais que lorsque j'agrandis, la zone de texte prenne la taille de la fenêtre (comme le notepad de windows).


heu, tu as un panel dans un panel là, et celui de l'extérieur est inutile.
au lieu de faire getContentPane().add(panel), fait directement setContentPane(panel)

Reply

Marsh Posté le 09-02-2005 à 11:29:56    

nraynaud a écrit :

heu, tu as un panel dans un panel là, et celui de l'extérieur est inutile.


 
Comment ça?
J'ai un JTextArea inclus dans un JScrollPane.
 
Je vais essayer ça ce soir.
Je savais pas pour le Alt+Impr Ecran :)

Reply

Marsh Posté le 09-02-2005 à 11:31:51    

c'est un menu que tu as au-dessus ?

Reply

Marsh Posté le 09-02-2005 à 18:40:58    

Oui j'ai changé les boutons pour un JMenuBar
Je vais revoir la disposition du panneau NORTH  :)


Message édité par arrau le 09-02-2005 à 19:25:22
Reply

Marsh Posté le 05-03-2005 à 15:07:31    

J'ai aussi essayé de faire un petit éditeur de texte en Java :

Code :
  1. import java.awt.event.*;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.io.*;
  5. public class Notepad extends JFrame implements ActionListener,ItemListener{
  6.     JToolBar barre= new JToolBar();
  7.     JButton ouvrir = new JButton("Ouvrir" );
  8.     JButton enregistrer = new JButton("Enregistrer" );
  9.     JButton enregistrersous = new JButton("Enregistrer sous ..." );
  10.     JButton copier = new JButton("Copier" );
  11.     JButton couper = new JButton("Couper" );
  12.     JButton coller = new JButton("Coller" );
  13.     JButton fermer = new JButton("Fermer" );
  14.     JButton quitter = new JButton("Quitter" );
  15.     JComboBox police = new JComboBox();
  16.     JComboBox style = new JComboBox();
  17.     JComboBox taille = new JComboBox();
  18.     JTextArea edition = new JTextArea(8,40);
  19.     JEditorPane edition2 = new JEditorPane();
  20.     JScrollPane scroll = new JScrollPane(edition);
  21.     File fichier_courant = null;
  22.     String police_courante = "Dialog";
  23.     int style_courant = 0;
  24.     int taille_courante = 12;
  25.    
  26.     public Notepad() {
  27.         super("Editeur de texte simple" );
  28.         setSize(640,480);
  29.        
  30.         ouvrir.addActionListener(this);
  31.         ouvrir.setActionCommand("Ouvrir" );
  32.         enregistrer.addActionListener(this);
  33.         enregistrer.setActionCommand("Enregistrer" );
  34.         enregistrersous.addActionListener(this);
  35.         enregistrersous.setActionCommand("Enregistrer sous" );
  36.         fermer.addActionListener(this);
  37.         fermer.setActionCommand("Fermer" );
  38.         quitter.addActionListener(this);
  39.         quitter.setActionCommand("Quitter" );
  40.         copier.addActionListener(this);
  41.         copier.setActionCommand("Copier" );
  42.         couper.addActionListener(this);
  43.         couper.setActionCommand("Couper" );
  44.         coller.addActionListener(this);
  45.         coller.setActionCommand("Coller" );
  46.         police.addItemListener(this);
  47.         police.addItem("Dialog" );
  48.         police.addItem("Courier" );
  49.         police.addItem("Arial" );
  50.         police.addItem("Times New Roman" );
  51.         style.addItemListener(this);
  52.         style.addItem("Normal" );
  53.         style.addItem("Gras" );
  54.         style.addItem("Italique" );
  55.         style.addItem("Gras & Italique" );
  56.         taille.addItemListener(this);
  57.         taille.addItem("12" );
  58.         taille.addItem("14" );
  59.         taille.addItem("16" );
  60.         edition.setFont(new Font(police_courante,style_courant,taille_courante));
  61.        
  62.         barre.add(ouvrir);
  63.         barre.add(enregistrer);
  64.         barre.add(enregistrersous);
  65.         barre.add(copier);
  66.         barre.add(couper);
  67.         barre.add(coller);
  68.         barre.add(fermer);
  69.         barre.add(police);
  70.         barre.add(style);
  71.         barre.add(taille);
  72.         barre.add(quitter);
  73.         JPanel pane = new JPanel();
  74.         BorderLayout bord = new BorderLayout();
  75.         pane.setLayout(bord);
  76.         pane.add("North",barre);
  77.         pane.add("Center", scroll);
  78.        
  79.         setContentPane(pane);
  80.     }
  81.     public void actionPerformed(ActionEvent e) {
  82.         if(e.getActionCommand()=="Ouvrir" ) {
  83.             JFileChooser chooser = new JFileChooser();
  84.             chooser.setDialogTitle("Ouvrir un fichier ..." );
  85.             chooser.showOpenDialog(this);
  86.             if(chooser.getSelectedFile()==null){
  87.                 return;
  88.             }
  89.             fichier_courant=chooser.getSelectedFile();
  90.             try {
  91.                 FileInputStream fichier = new FileInputStream(chooser.getSelectedFile());
  92.                 int size=fichier.available();
  93.                 byte[] bytes = new byte[size];
  94.                 fichier.read(bytes);
  95.                 edition.setText(new String(bytes));
  96.                 fichier.close();
  97.             } catch (IOException erreur) {
  98.                 JOptionPane.showMessageDialog(null,"Erreur --- "+erreur.toString(),"Erreur",JOptionPane.ERROR_MESSAGE);
  99.             }
  100.         }
  101.         else if(e.getActionCommand()=="Enregistrer" ) {
  102.             if(fichier_courant==null) saveas();
  103.             else save();
  104.         }
  105.         else if(e.getActionCommand()=="Enregistrer sous" ) {
  106.             saveas();
  107.         }
  108.         else if(e.getActionCommand()=="Fermer" ) {
  109.             fichier_courant=null;
  110.             edition.setText("" );
  111.         }
  112.         else if(e.getActionCommand()=="Copier" ) {
  113.             edition.copy();
  114.             edition.setCaretPosition(0);
  115.         }
  116.         else if(e.getActionCommand()=="Couper" ) {
  117.             edition.cut();
  118.             edition.setCaretPosition(0);
  119.         }
  120.         else if(e.getActionCommand()=="Coller" ) {
  121.             edition.paste();
  122.         }
  123.         else if(e.getActionCommand()=="Quitter" ) {
  124.             System.exit(0);
  125.         }
  126.     }
  127.        
  128.     public void itemStateChanged(ItemEvent e) {
  129.         if(e.getSource()==police){
  130.             police_courante=e.getItem().toString();
  131.         }
  132.         else if(e.getSource()==style) {
  133.             style_courant=style.getSelectedIndex();
  134.         }
  135.         else if(e.getSource()==taille){
  136.             Integer taille_courante2=new Integer(e.getItem().toString());
  137.             taille_courante=taille_courante2.intValue();
  138.         }
  139.         edition.setFont(new Font(police_courante,style_courant,taille_courante));
  140.     }
  141.     public void saveas(){
  142.         JFileChooser chooser = new JFileChooser();
  143.         chooser.setDialogTitle("Enregistrer le fichier sous ..." );
  144.         chooser.showSaveDialog(this);
  145.         if(chooser.getSelectedFile()==null) {
  146.             return;
  147.         }
  148.         fichier_courant=chooser.getSelectedFile();
  149.         save();
  150.     }
  151.     public void save(){
  152.         try {
  153.             FileOutputStream fichier = new FileOutputStream(fichier_courant);
  154.             fichier.write(edition.getText().getBytes());
  155.             fichier.close();
  156.         } catch (IOException erreur) {
  157.             JOptionPane.showMessageDialog(null,"Erreur --- "+erreur.toString(),"Erreur",JOptionPane.ERROR_MESSAGE);
  158.         }
  159.     }
  160.    
  161.     public static void main(String[] args){
  162.         try {
  163.             UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  164.         } catch (Exception e) {
  165.             JOptionPane.showMessageDialog(null,"Erreur --- "+e.toString(),"Erreur",JOptionPane.ERROR_MESSAGE);
  166.         }
  167.         JFrame frame = new Notepad();
  168.         ExitWindow exit=new ExitWindow();
  169.         frame.addWindowListener(exit);
  170.         frame.show();
  171.     }
  172. }
  173. class ExitWindow extends WindowAdapter {
  174.     public void windowClosing(WindowEvent e){
  175.         System.exit(0);
  176.     }
  177. }

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed