Mise à jour JTextArea

sniper91 Messages postés 1 Date d'inscription lundi 6 décembre 2004 Statut Membre Dernière intervention 20 juillet 2006 - 20 juil. 2006 à 16:11
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 - 20 juil. 2006 à 21:18
Bonjour,

Je réalise une application qui est composé d'une JFrame qui contient une JPanel et elle même un JTextArea. Le JText Area est alimenté par une autre classe en l'appelant par un getteur, et en utilisant  la méthode append.(Exemple: getTextArea().append("une string);

Le JTextArea est bien alimenté mais il ne se met pas à jour au point de vuze affichage, pourant j'utilise un DocumentListener avec la methode insertUpdate avec l'appel de la methode validate.
 Ceci est censé mettre à jour des qu'il y a un append de fait (Exemple:
  
_message.getDocument().addDocumentListener(new DocumentListener() {
        public void insertUpdate(DocumentEvent e) {
           System.out.print("MODIF");
           validate();
        }

J'aimerais bien que des qu'un append est appelé le JTextArea soit mis à jour en visualisation.

7 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
20 juil. 2006 à 17:00
Salut,


je ne vois vraiment pas ou est le problème....


import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import java.awt.Dimension;

import java.awt.GridBagLayout;

import java.awt.GridBagConstraints;

import java.awt.Insets;

import java.awt.Point;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;


import javax.swing.JButton;


public class Test extends JFrame {

    private static final long    serialVersionUID    = 7689631578795601657L;

    private JPanel       
           
jContentPane          = null;

    private JTextArea   
         
area           
             = null;


    public Test() {

        super("Affichage de textes");

        initialize();

    }


    /**

     * This method initializes this

     *

     */

    private void initialize() {

        this.setSize(new Dimension(300, 300));

        setLocationRelativeTo(null);

        setDefaultCloseOperation(EXIT_ON_CLOSE);

        setContentPane(getJContentPane());

    }


    private JPanel getJContentPane() {

        if (jContentPane == null) {

            jContentPane = new JPanel();

            jContentPane.setLayout(new GridBagLayout());

            GridBagConstraints c = new GridBagConstraints();

            c.fill = GridBagConstraints.BOTH;

            c.gridy = 0;

            c.weightx = 1.0;

            c.weighty = 1.0;

            c.gridx = 0;

            c.insets = new Insets(10, 10, 10, 10);

            jContentPane.add(new JScrollPane(getArea()), c);


        }

        return jContentPane;

    }


    /**

     * This method initializes area   

     *    

     * @return javax.swing.JTextArea   

     */

    public JTextArea getArea() {

        if (area == null) {

            area = new JTextArea();

            //juste pour la presentation

            area.setWrapStyleWord(true);

            area.setLineWrap(true);

        }

        return area;

    }


    public static void main(String[] args) {

        Test t = new Test();

        t.setVisible(true);

        new AddText(t).setVisible(true);

    }

}


class AddText extends JFrame implements ActionListener {

    private static final long    serialVersionUID    = 4819914198207797003L;

    private JPanel       
           
jContentPane        = null;

    private JButton       
         btAdd   
       
         = null;

    private Test       
   
         
owner           
         = null;


    public AddText(Test owner) {

        super("Ajout de texte");

        this.owner = owner;

        initialize();

    }


    /**

     * This method initializes this

     *

     */

    private void initialize() {

        this.setSize(new Dimension(300, 300));

        setLocation(new Point(0, 0));

        setDefaultCloseOperation(EXIT_ON_CLOSE);

        setContentPane(getJContentPane());

    }


    private JPanel getJContentPane() {

        if (jContentPane == null) {

            jContentPane = new JPanel();

            jContentPane.setLayout(new GridBagLayout());

            GridBagConstraints c = new GridBagConstraints();

            c.gridx = 0;

            c.gridy = 0;

            c.weightx = 0.0;

            c.weighty = 0.0;

            c.insets = new Insets(10, 0, 10, 0);

            jContentPane.add(getBtAdd(), c);

        }

        return jContentPane;

    }


    /**

     * This method initializes btAdd   

     *    

     * @return javax.swing.JButton   

     */

    private JButton getBtAdd() {

        if (btAdd == null) {

            btAdd = new JButton("Ajouter un text");

            btAdd.addActionListener(this);

        }

        return btAdd;

    }


    public void actionPerformed(ActionEvent e) {

        if (e.getSource().equals(getBtAdd())) {

            owner.getArea().append("text ");

        }


    }

}

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
20 juil. 2006 à 19:45
heu .... je sais pas mais moi quand je fais ce genre de chose je fais :

...
public static JTextArea area;
....
public static void append(String s){
area.append(s+"\n");
area.repaint();
}

et en general ca suffit

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
20 juil. 2006 à 19:48
argggggggg pas de repaint() :P

pour la taille j'ai fais un C/C de sous eclipse vu que j'ai fais le tout avec VE

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
20 juil. 2006 à 20:16
faineant :p
qu'est ce que tu as contre les repaint :p?

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
20 juil. 2006 à 20:27
j'avoue que je suis un feneant (c'est pas ma faute il fait trop chaud  )

c'est completement inutile pour sont cas, deplus imagine de faire un repaint sur un JTextArea contenant un millier de lignes.... tu vas faire fuser le CPU pour rien sachant qu'il va redessiner le composant ainsi que tout le texte caractere pr caractere

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
20 juil. 2006 à 21:16
possible
mais si je me trompe pas la fenetre de l'appli quand tu la decplace par exemple appel la methode repaint noN?
j'ai remarquer ca sur une appli ou je fais une map et que j'affiche a chaque fois que repaint etait appele

cela dit c'est peut etre dfferent avec les JTextArea ...

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
20 juil. 2006 à 21:18
j'ai oublie moi aussi je suis faineant mais dans mes proj je ne touche pas au VE
je trouve que le code renvoyais et degueulasse et chiant a modifier ....
rien ne vaut l'huile de coude :p

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
Rejoignez-nous