Synchronisation de 2 JTedtPane

Synchronisation de 2 JTedtPane - Java - Programmation

Marsh Posté le 08-06-2008 à 08:09:07    

Bonjour
 
Je voudrais synchroniser deux JTextPane.
Le premier permet à l'utilisateur de saisir du texte avec des noms de variables. Il permet aussi de gérer la mise en forme (gras, italique, soulignement, police, ...)
Le second JTextPane montre le résultat en remplaçant les variables par leur valeur.
 
Mon problème vient de l'alignement du texte : quand je demande à centrer une ligne ou à l'aligner à droite, cela marche bien dans la premier JTextPane mais pas dans le second. Pourquoi ?
 
Je vous joins un code simplifié qui illustre ce problème, je n'ai mis qu'un bouton de centrage mais il reproduit le problème. Je tiens à dire que je bute sur ce problème depuis des semaines et que j'ai largement cherché sur Internet.

Code :
  1. import java.awt.Container;
  2. import java.awt.event.ActionEvent;
  3. import java.awt.event.ActionListener;
  4. import java.io.ByteArrayOutputStream;
  5. import java.io.IOException;
  6. import java.io.StringReader;
  7. import javax.swing.JButton;
  8. import javax.swing.JFrame;
  9. import javax.swing.JTextPane;
  10. import javax.swing.event.DocumentEvent;
  11. import javax.swing.event.DocumentListener;
  12. import javax.swing.text.BadLocationException;
  13. import javax.swing.text.DefaultStyledDocument;
  14. import javax.swing.text.MutableAttributeSet;
  15. import javax.swing.text.StyleConstants;
  16. import javax.swing.text.StyledDocument;
  17. import javax.swing.text.rtf.RTFEditorKit;
  18. //
  19. public class FenEssai extends JFrame implements DocumentListener
  20. {
  21. // Numéro de série
  22. private static final long serialVersionUID = 1L;
  23. // Zone de saisie
  24. private JTextPane                  textePaneSaisie;
  25. private StyledDocument             styledDocumentSaisie;
  26. private RTFEditorKit               editorKitSaisie;
  27. // Simulation de l'étiquette
  28. private JTextPane                  textePaneSimul;
  29. private StyledDocument             styledDocumentSimul;
  30. private RTFEditorKit               editorKitSimul;
  31. //
  32. private JButton                    btAligneC;
  33. //
  34. // --------------------------------------------------------------------------------
  35. // Constructeur
  36. public FenEssai()
  37. {
  38.  setSize (600 , 400);
  39.  Container conteneur = getContentPane();
  40.  conteneur.setLayout(null);
  41.  // Bouton centrage
  42.  btAligneC = new JButton("Centrage" );
  43.  btAligneC.setBounds(5 , 5 , 150 , 20);
  44.  btAligneC.addActionListener
  45.  (
  46.   new ActionListener()
  47.   {
  48.    public void actionPerformed(ActionEvent e)
  49.    {
  50.     MutableAttributeSet attr = textePaneSaisie.getInputAttributes();
  51.     StyleConstants.setAlignment(attr, StyleConstants.ALIGN_CENTER);
  52.     textePaneSaisie.setParagraphAttributes(attr, false);
  53.    }
  54.   }
  55.  );
  56.  conteneur.add(btAligneC);
  57.  // ----- Zone de saisie de l'étiquette
  58.  editorKitSaisie = new RTFEditorKit();
  59.  textePaneSaisie = new JTextPane();
  60.  textePaneSaisie.setEditorKit(editorKitSaisie);
  61.  textePaneSaisie.setBounds(10 , 50 , 400 , 100 );
  62.  styledDocumentSaisie = textePaneSaisie.getStyledDocument();
  63.  styledDocumentSaisie.addDocumentListener(this);
  64.  conteneur.add(textePaneSaisie);
  65.  // ----- Simulation de l'étiquette
  66.  //
  67.  editorKitSimul = new RTFEditorKit();
  68.  textePaneSimul = new JTextPane();
  69.  textePaneSimul.setBounds(10, 200 , 400 , 100);
  70.  textePaneSimul.setEditorKit(editorKitSimul);
  71.  textePaneSimul.setEditable(false);
  72.  //
  73.  styledDocumentSimul = textePaneSimul.getStyledDocument();
  74.  conteneur.add(textePaneSimul);
  75. }
  76. private void modificationModele()
  77. {
  78.  String texte;
  79.  ByteArrayOutputStream ecrivain = new ByteArrayOutputStream();
  80.  try
  81.  {
  82.   editorKitSaisie.write(ecrivain, styledDocumentSaisie, 0, styledDocumentSaisie.getLength());
  83.   ecrivain.flush();
  84.   ecrivain.close();
  85.  }
  86.  catch (IOException ioe)
  87.  {
  88.   System.out.println("FenModeleEtiquette lireTexte  Erreur entrée/sortie" );
  89.  }
  90.  catch (BadLocationException ble)
  91.  {
  92.   System.out.println("FenModeleEtiquette lireTexte  Erreur de position" );
  93.  }
  94.  texte = ecrivain.toString();
  95.  /*
  96.   Remplacement dans texte
  97.   */
  98.  StringReader lecteur = new StringReader(texte);
  99.  try
  100.  {
  101.   styledDocumentSimul = new DefaultStyledDocument();
  102.   editorKitSimul.read(lecteur, styledDocumentSimul , 0);
  103.   textePaneSimul.setStyledDocument(styledDocumentSimul);
  104.  }
  105.  catch (IOException ioe)
  106.  {
  107.   System.out.println("FenModeleEtiquette modificationModele  Erreur entrée/sortie" );
  108.  }
  109.  catch (BadLocationException ble)
  110.  {
  111.   System.out.println("FenModeleEtiquette modificationModele  Erreur de position" );
  112.  }
  113. }
  114. public void insertUpdate(DocumentEvent docEvent)
  115. {
  116.  modificationModele();
  117. }
  118. public void removeUpdate(DocumentEvent docEvent)
  119. {
  120.  modificationModele();
  121. }
  122. public void changedUpdate(DocumentEvent docEvent)
  123. {
  124.  modificationModele();
  125. }
  126. }


Si quelqu'un a une idée ....
 
Merci

Reply

Marsh Posté le 08-06-2008 à 08:09:07   

Reply

Sujets relatifs:

Leave a Replay

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