Probleme pour afficher un fichier dans un JTextArea

dompty Messages postés 7 Date d'inscription lundi 13 décembre 2010 Statut Membre Dernière intervention 13 décembre 2010 - 13 déc. 2010 à 09:50
laguchori Messages postés 62 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 13 janvier 2012 - 14 déc. 2010 à 14:19
Bonjour, je suis en train de faire un petit logiciel de métrique et j'aurais aimé ajouter comme fonctionnalité de pouvoir ouvrir le fichier en question dans un JTextArea. Donc a l'aide d'un JFileChooser je choisis un fichier, puis le logiciel calcul quelque metrique et quand je clique sur mon bouton "afficher code" la problème...
Il affiche la JFrame et mes deux bouton sur cette dernière mais c'est tout, pas de fichier visualisable...

Ici voici ma classe servant a afficher le fichier :
public class AfficheCode extends JFrame {

    private Button bouton = new Button("Rafraichir");
    private Button fermer = new Button("Fermer");
    private Panel container = new Panel();
    private Panel container2 = new Panel();
    String f = "";
    String fichierContenu = "";
    JTextArea champTexte = new JTextArea();
    Compteurlignes cl;



    public AfficheCode(String fa) {
        setSize(1000, 700);
        setLocation(0, 0);
        JScrollPane sclp = new JScrollPane();
        sclp.setAutoscrolls(true);
        sclp.setOpaque(true);
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(sclp, BorderLayout.CENTER);
        this.setVisible(true);
        this.add(container, BorderLayout.SOUTH);
        this.add(container2);
        container.add(bouton, "Center");
        container.add(fermer, "Center");
        champTexte.setLineWrap(true);
        champTexte.setWrapStyleWord(true);
        add(champTexte);
        f=fa;
        LireFichier();
    }

    public void LireFichier() {
        try {
            RandomAccessFile raf = new RandomAccessFile(f, "r");
            String ligne;
            while ((ligne = raf.readLine()) != null) {
                fichierContenu += ligne+"\n";
            }
            champTexte.setText(fichierContenu);
        } catch (IOException e) {
            System.out.println("erreur dans: " + e);
        }
    }
}


et je fait appel a cette derniere dans une autre classe ici :
    public void actionPerformed(ActionEvent e) {
        Button Bouton = (Button) e.getSource();
        if (Bouton == bouton) {
            compteLignes(chemin);
            addTotal();
        }
        if (Bouton == parcourir) {
            Parc pa = new Parc();
            ref = pa.getFichier();
            Compteurlignes fr = new Compteurlignes();
            dispose();
            fr.test(ref);
        }
        if (Bouton == affCode) {
            AfficheCode aff = new AfficheCode(chemin);
            System.out.println(chemin);
        }
    }


Tout fonctionne quand je met dans mon main " AfficheCode aff = new AfficheCode("/home/xxx/bureau/moi.java"); "
Mais dans ce que je veux faire ça ne fonctionne pas... J'ai d'abord cru que dans ma variable "chemin" il n'y avait rien mais le petit System.out.println(chemin); confirme que le chemin se trouve bien dedans.

Donc je fais appel a vous, si une personne peut m'aider et m'accorder un peu de son temps je serais très ravi. Merci. (désolé pour les fautes d'orthographes)

11 réponses

Utilisateur anonyme
13 déc. 2010 à 10:58
Bonjour

Comme tu utilises un BorderLayout, tu ne dois pas faire directement :
this.add(container2);
add(champTexte);


Tu dois passer une contrainte à chaque fois, du genre BorderLayout.CENTER. Je ne vois pas trop ce que tu cherches à faire avec ça :
container.add(bouton, "Center");
container.add(fermer, "Center");


Evite également de mélanger les composants AWT et Swing dans la mesure du possible. Utilise plutôt JPanel et JButton avec JScrollPane comme tu as une JFrame.

A l'avenir, lis la documentation avant d'écrire n'importe quoi :
http://download.oracle.com/javase/6/docs/api/
Il est important de savoir utiliser la documentation Java qui est particulèrement bien fichue.



















TUER : http://tuer.sourceforge.net/tuer.jnlp

yeah! vive java
0
dompty Messages postés 7 Date d'inscription lundi 13 décembre 2010 Statut Membre Dernière intervention 13 décembre 2010
13 déc. 2010 à 11:07
Merci pour tes conseilles et je débute donc excuse moi si mon code ne te plaît pas mais c'est en continuant que je vais progresser donc "lis la documentation avant d'écrire n'importe quoi" je sais très bien qu'avec un BorderLayout il faut préciser ensuite .CENTER ou .NORTH ...etc mais je pensais que si l'on mettait rien il mettait un emplacement par défaut, et Netbeans ne me signalant pas que c'est une erreur je pensais que c’était faisable. Merci tout de même de ton aide même si je reste au même point...

Enfin j'ai découvert quelque chose, dans mon main si je fais ça :

String chemin = "/home/xxx/Bureau/moi.java
AfficheCode aff = new AfficheCode(chemin);

et bien ça marche mais quand je récupère le chemin dans une variable d'une autre méthode ça ne marche pas, pourtant la variable contient bien le chemin.
0
dompty Messages postés 7 Date d'inscription lundi 13 décembre 2010 Statut Membre Dernière intervention 13 décembre 2010
13 déc. 2010 à 11:13
container.add(bouton, "Center");
container.add(fermer, "Center");


Sert a ajouter les deux bouton dans Container.
0
dompty Messages postés 7 Date d'inscription lundi 13 décembre 2010 Statut Membre Dernière intervention 13 décembre 2010
13 déc. 2010 à 11:38
Bon mon problème se complique, en gros dans mon main si je fais ça
AfficheCode aff = new AfficheCode("/home/xxx/Bureau/moi.java");

ça marche, si je le met dans mon écouteur :

    public void actionPerformed(ActionEvent e) {
        JButton Bouton = (JButton) e.getSource();
        if (Bouton == bouton) {
            compteLignes(chemin);
            addTotal();
        }
        if (Bouton == parcourir) {
            Parc pa = new Parc();
            ref = pa.getFichier();
            Compteurlignes fr = new Compteurlignes();
            dispose();
            fr.test(ref);
        }
        if (Bouton == affCode) {
            AfficheCode aff = new AfficheCode("/home/xxx/Bureau/moi.java");
            System.out.println(chemin);
        }
    }


ça ne marche pas... est-ce mon écouteur? pourtant les deux autres bouttons fonctionnent.
0

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

Posez votre question
Utilisateur anonyme
13 déc. 2010 à 12:15
Netbeans ne signale pas toutes les erreurs et ton code est très confus (getContentPane() n'est pas utile là où tu t'en sers). Je maintiens que tu n'as pas lu la documentation et je vais même le prouver.
container.add(bouton, "Center");

n'est pas correct car dans la documentation, il est bien précisé que le second paramètre doit être une contrainte et non une chaîne de caractères arbitraire. Il est également mentionné dans la documentation que le layout manager par défaut d'un panel est un FlowLayout donc tu aurais dû utiliser une contrainte dépendant de ton choix de layout manager. Contrairement à ce que tu dis, il n'y a pas d'emplacement par défaut, il est bien mentionné dans la documentation que si tu utilises add(Component comp), ça le met à la fin du conteneur ce qui n'est pas toujours une très bonne idée... surtout à partir du moment que tu changes de layout manager.

Pour régler ton problème, mets-toi en mode debug et regarde exactement quel code est exécuté pas à pas et le contenu des variables. Vérifie que la variable Bouton prend bien la valeur affCode.










TUER : http://tuer.sourceforge.net/tuer.jnlp

yeah! vive java
0
Utilisateur anonyme
13 déc. 2010 à 12:17
Dans Netbeans, je te déconseille de mélanger le code obtenu avec Matisse et le code à la main surtout si tu ajoutes tes propres écouteurs et tes propres éléments de GUI. Soit tu fais tout avec Matisse, soit tu fais tout à la main.












TUER : http://tuer.sourceforge.net/tuer.jnlp

yeah! vive java
0
dompty Messages postés 7 Date d'inscription lundi 13 décembre 2010 Statut Membre Dernière intervention 13 décembre 2010
13 déc. 2010 à 13:35
J'utilise netbeans mais j'ai tout codé a la main, de ce coté la je ne mélange pas je te rassure. Il est vrai que la documentation me dis que je suis en tort mais je ne vérifie pas toute mes lignes, j'ai appris certaine commande comme le : container.add(bouton, "Center"); sur un forum et je n'ai pas pensé a vérifier...
En tout cas je vais corriger ça, en ce qui concerne mon problème même sans passer par le mode "debug" je peux te dire qu'il s’exécute puisque la JFrame s'ouvre (celle qui doit contenir l'affichage du fichier) ainsi que les deux boutons qui se trouve en bas de cette JFrame. Seul le fichier ne s'affiche pas... =/
0
Utilisateur anonyme
13 déc. 2010 à 16:33
Sur quel forum as-tu lu ce truc faux? Tu es sensé vérifier toutes tes lignes sinon tu vas écrire n'importe quoi sans comprendre ce qui n'est pas très pédagogique.

Si je comprends bien, tu dis que tu passes quand même dans le constructeur de la classe AfficheCode. Déjà, tu devrais appeler setVisible(true) tout à la fin, après avoir lu le fichier. Si tu ne veux pas utiliser le mode debug, mets au moins quelques traces supplémentaires, affiche la variable fichierContenu par exemple.














TUER : http://tuer.sourceforge.net/tuer.jnlp

yeah! vive java
0
dompty Messages postés 7 Date d'inscription lundi 13 décembre 2010 Statut Membre Dernière intervention 13 décembre 2010
13 déc. 2010 à 16:41
Tout d'abord merci de te pencher sur mon problème. Le problème c'est que tu cherches des erreurs dans ma classe afficheCode mais elle fonctionne cette classe, peut être qu'elle est mal codée, ça je corrigerais toutes mes fautes mais en attendant elle fonctionne si je l'appelle dans mon main, le problème c'est juste que dans mon ActionListenner ça ne marche plus, alors en mode debug, la variable FichierContenu reprend bien ligne par ligne les lignes de mon texte +/ donc ça c'est ok.
0
dompty Messages postés 7 Date d'inscription lundi 13 décembre 2010 Statut Membre Dernière intervention 13 décembre 2010
13 déc. 2010 à 17:17
Probleme Résolu, mais alors je ne sais pas comment j'ai fait ^^ merci pour ton aide.
0
laguchori Messages postés 62 Date d'inscription mardi 26 octobre 2010 Statut Membre Dernière intervention 13 janvier 2012
14 déc. 2010 à 14:19
merci!!
0
Rejoignez-nous