gerard k | 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 :
- import java.awt.Container;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.io.StringReader;
- import javax.swing.JButton;
- import javax.swing.JFrame;
- import javax.swing.JTextPane;
- import javax.swing.event.DocumentEvent;
- import javax.swing.event.DocumentListener;
- import javax.swing.text.BadLocationException;
- import javax.swing.text.DefaultStyledDocument;
- import javax.swing.text.MutableAttributeSet;
- import javax.swing.text.StyleConstants;
- import javax.swing.text.StyledDocument;
- import javax.swing.text.rtf.RTFEditorKit;
- //
- public class FenEssai extends JFrame implements DocumentListener
- {
- // Numéro de série
- private static final long serialVersionUID = 1L;
- // Zone de saisie
- private JTextPane textePaneSaisie;
- private StyledDocument styledDocumentSaisie;
- private RTFEditorKit editorKitSaisie;
- // Simulation de l'étiquette
- private JTextPane textePaneSimul;
- private StyledDocument styledDocumentSimul;
- private RTFEditorKit editorKitSimul;
- //
- private JButton btAligneC;
- //
- // --------------------------------------------------------------------------------
- // Constructeur
- public FenEssai()
- {
- setSize (600 , 400);
- Container conteneur = getContentPane();
- conteneur.setLayout(null);
- // Bouton centrage
- btAligneC = new JButton("Centrage" );
- btAligneC.setBounds(5 , 5 , 150 , 20);
- btAligneC.addActionListener
- (
- new ActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
- MutableAttributeSet attr = textePaneSaisie.getInputAttributes();
- StyleConstants.setAlignment(attr, StyleConstants.ALIGN_CENTER);
- textePaneSaisie.setParagraphAttributes(attr, false);
- }
- }
- );
- conteneur.add(btAligneC);
- // ----- Zone de saisie de l'étiquette
- editorKitSaisie = new RTFEditorKit();
- textePaneSaisie = new JTextPane();
- textePaneSaisie.setEditorKit(editorKitSaisie);
- textePaneSaisie.setBounds(10 , 50 , 400 , 100 );
- styledDocumentSaisie = textePaneSaisie.getStyledDocument();
- styledDocumentSaisie.addDocumentListener(this);
- conteneur.add(textePaneSaisie);
- // ----- Simulation de l'étiquette
- //
- editorKitSimul = new RTFEditorKit();
- textePaneSimul = new JTextPane();
- textePaneSimul.setBounds(10, 200 , 400 , 100);
- textePaneSimul.setEditorKit(editorKitSimul);
- textePaneSimul.setEditable(false);
- //
- styledDocumentSimul = textePaneSimul.getStyledDocument();
- conteneur.add(textePaneSimul);
- }
- private void modificationModele()
- {
- String texte;
- ByteArrayOutputStream ecrivain = new ByteArrayOutputStream();
- try
- {
- editorKitSaisie.write(ecrivain, styledDocumentSaisie, 0, styledDocumentSaisie.getLength());
- ecrivain.flush();
- ecrivain.close();
- }
- catch (IOException ioe)
- {
- System.out.println("FenModeleEtiquette lireTexte Erreur entrée/sortie" );
- }
- catch (BadLocationException ble)
- {
- System.out.println("FenModeleEtiquette lireTexte Erreur de position" );
- }
- texte = ecrivain.toString();
- /*
- Remplacement dans texte
- */
- StringReader lecteur = new StringReader(texte);
- try
- {
- styledDocumentSimul = new DefaultStyledDocument();
- editorKitSimul.read(lecteur, styledDocumentSimul , 0);
- textePaneSimul.setStyledDocument(styledDocumentSimul);
- }
- catch (IOException ioe)
- {
- System.out.println("FenModeleEtiquette modificationModele Erreur entrée/sortie" );
- }
- catch (BadLocationException ble)
- {
- System.out.println("FenModeleEtiquette modificationModele Erreur de position" );
- }
- }
- public void insertUpdate(DocumentEvent docEvent)
- {
- modificationModele();
- }
- public void removeUpdate(DocumentEvent docEvent)
- {
- modificationModele();
- }
- public void changedUpdate(DocumentEvent docEvent)
- {
- modificationModele();
- }
- }
|
Si quelqu'un a une idée ....
Merci |