IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

JScrollPane dans un JEditorPane


Sujet :

AWT/Swing Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 13
    Points : 7
    Points
    7
    Par défaut JScrollPane dans un JEditorPane
    Bonjour à tous,

    Je souhaite afficher un fichier html dans un JPanel.
    Pour se faire j'ai utilisé un JEditorPane et un JScrollPane pour pouvoir scroller dans le fichier affiché.

    Voici le code que j'utilise actuellement dans une classe qui étend JPanel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    private JScrollPane scrollPane;
    private JEditorPane viewer;
     
    try {						
    			File file = new File(filename);
    			viewer = new JEditorPane();			
                           viewer.setPage(file.toURL());
    			scrollPane = new JScrollPane (viewer);			
    			viewer.setEditable (false);						
    			this.add (scrollPane, BorderLayout.CENTER);			
    			this.getRootPane().repaint();	
     
    		} catch (Exception e1) {			
    			viewer = new JEditorPane();
    			viewer.setText("");
    			scrollPane = new JScrollPane (viewer);	
    			this.add (scrollPane, BorderLayout.CENTER);
    			scrollPane.revalidate();
    			JOptionPane.showMessageDialog(scrollPane, "Aucune fiche associée");		
    		}
    J'ai un problème au rechargement de l'affichage au changement du contenu de la String filename.

    Je réutilise le code sité ci dessus avec la nouvelle valeur de la string, et graphiquement, je vois le contenu du nouveau fichier html, mais lorsque je viens à utiliser le scrolling ou à sélectionner du texte, c'est le texte du tout premier fichier html sélectionné qui apparait, peut importe le nombre de fichier que je cherche à afficher, seul le premier affiché est sélectionnable ou scrollable.

    Je n'arrive pas à forcer le rafraichissement du JScrollPane.

    Merci par avance à ceux qui me répondront.

    Bonne journée.

  2. #2
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Salut,

    J'ai l'impression (comme le code n'est pas complet) que tu créé un nouveau JEditorPane à chaque fichier chargé, et que tu l'ajoute à ton panel (via un scrollpane), et ce, de manière dynamique alors que ton interface est déjà affichée. C'est une situation où ton panel est invalide, cela nécessite un appel de la méthode revalidate() du panel (cela devrait régler le problème je pense).

    Sinon, pourquoi ne pas uniquement te servir de la méthode setPage de l'éditeur en gardant le même objet JEditorPane ? As-tu besoin de réinstancier l'éditeur à chaque fois ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Merci pour cette réponse, en effet, ça peut vite exploser côté mémoire, j'ai corrigé avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    try {						
    			File file = new File(filename);
                           viewer.setPage(file.toURL());
    			scrollPane.setViewportView(viewer);
    			viewer.setEditable (false);
    			this.add (scrollPane, BorderLayout.CENTER);
    			this.getRootPane().revalidate();
     
     
    		} catch (Exception e1) {				
    			viewer.setText("");
    			scrollPane.setViewportView(viewer);	
    			this.add (scrollPane, BorderLayout.CENTER);
    			this.getRootPane().revalidate();
    			JOptionPane.showMessageDialog(scrollPane, "Aucune fiche associée");		
    		}
    J'ai construit mon JEditorPane et mon JScrollPane dans l'init de cette classe.
    Côté comportement scrolling tout est clean, le pb concerne l'exception.
    Le panel de preview se vide correctement, j'ai bien mon Joptionpane, mais lorsque je reselectionne un filename, l'affichage reste vide. Il me faut resélectionner à nouveau un filename pour que le panel de preview s'actualise, c'est moins génant, mais je pige pas pourquoi.

  4. #4
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Citation Envoyé par beber69 Voir le message
    j'ai corrigé avec le code suivant
    Tu peux aller bien au delà. Comme tu te sert de la même instance de ton JEditorPane, viewer, tu n'as plus besoin de le réajouter dans le scrollpane, donc tu peux faire sauter : scrollPane.setViewportView(viewer);
    De même tu n'as pas besoin d'ajouter le scroll au panel, tu peux faire sauter : this.add (scrollPane, BorderLayout.CENTER);
    Du coup tu n'as plus besoin du revalidate() et non plus de rédéfinir le caractère non éditable de l'éditeur : viewer.setEditable (false);
    Le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    scrollPane.setViewportView(viewer);
    viewer.setEditable (false);
    this.add (scrollPane, BorderLayout.CENTER);
    doit être placé dans le constructeur de ton panel (ou de ta fenêtre tout dépend comment tu construit ton interface), pas à chaque fois que tu affiche une page dans ton viewer.

    De même pour le code dans ton exception, et cela règlera peut être aussi ton second problème. De plus ton appli gagnera en réactivité. Enfin je pense que ce code de mise à jour de page devrait être exécuté dans l'EDT.

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Merci d'avoir pris le temps de m'expliquer tout ça en détail, tous mes problèmes ont trouvé solution.
    J'en prends bien note pour la mise en forme de mes interfaces.
    Mes problèmes sont résolus, grace à toi.

  6. #6
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    De rien, ça m'a fait plaisirs
    Bonne continuation
    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fond d'écran dans un JEditorPane
    Par BeLO dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 16/04/2007, 10h55
  2. Réponses: 1
    Dernier message: 18/03/2007, 14h48
  3. JScrollPane dans une JInternalFrame.. possible ?
    Par narsi1 dans le forum AWT/Swing
    Réponses: 14
    Dernier message: 08/06/2006, 13h57
  4. JScrollPane dans une JInternalFrame contenant un graphic
    Par Sirkiller dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 08/06/2006, 11h13
  5. [XSLT] Visualisation d'un fichier xml dans un jEditorPane
    Par Yannos94 dans le forum Format d'échange (XML, JSON...)
    Réponses: 16
    Dernier message: 09/01/2004, 17h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo