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

Composants Java Discussion :

Images dans un JTextPane


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Par défaut Images dans un JTextPane
    Bonjour,
    J'ai écris un petit chat.. je tente d'y mettre des smileys , ils s'affichent bien lors de la selection , mais lorsqu'ils doivent s'afficher dans le JTextPane , ils ne s'affichent pas

    Voici le code d'initialisation :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    	   monEcran = new JTextPane()
    	   {
               //Image grayImage = GrayFilter.createDisabledImage(image);
               {setOpaque(false);}
     
               public void paintComponent (Graphics g)
               {
                   g.drawImage(image, 0, 0, (int)getSize().getWidth(), (int)getSize().getHeight(), this);
                   //g.drawImage(grayImage, 0, 0, (int)getSize().getWidth(), (int)getSize().getHeight(), this);
                   super.paintComponent(g);
               }
           };
           monEcran.setEditable(false);
           monEcran.setFocusable(false);
    	   doc = monEcran.getStyledDocument();
     // DEFINITION DES DIFFERENTS STYLES (BOLD , ICON , REGULAR .. )
    	   Style def = StyleContext.getDefaultStyleContext().
           getStyle(StyleContext.DEFAULT_STYLE);
           Style regular = doc.addStyle("regular", def);
           s = doc.addStyle("icon", regular);
           StyleConstants.setAlignment(s, StyleConstants.ALIGN_CENTER);
     
     
           if (monSmil != null) {
               StyleConstants.setIcon(s, monSmil);
           }
     
           validate();
     
           c.add(new JScrollPane(monEcran),BorderLayout.CENTER);
    	   c.add(userList,BorderLayout.EAST);
    	   c.add(userArea,BorderLayout.SOUTH);
    Et voici là où je demande l'affichage dans le JTextPane :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
     msg=msg+"                  ";//EVITER ARRAY EXCEPTION (SUBSTRING QUI RECHERCHERAIT TROP LOIN)
    				   String textTemp="";
    				   for(int cpt1 = 0; cpt1<msg.length();cpt1++)// Pour chaque lettre
    				   {
    					   int trouve=0;
    					   if(msg.charAt(cpt1)=='#') // smiley possible
    					   {
    						   for(int cpt2=0 ; trouve==0 && cpt2<nomSmileys.length;cpt2++) // vérification de chaque smiely
    						   {
    							  if(msg.substring(cpt1+1,cpt1+nomSmileys[cpt2].length()+1).equals(nomSmileys[cpt2]))
    							  {// SI UN SMILEY EST DETECTE
    								  System.out.println("images\\"+nomSmileys[cpt2]+".jpg");
    								  monSmil= new ImageIcon("images\\"+nomSmileys[cpt2]+".jpg");
    								  if (monSmil != null) {
    							            StyleConstants.setIcon(s, monSmil);
    							        }
    								  doc.insertString(doc.getLength(), "", doc.getStyle("icon"));
    								  validate();
    								  cpt1=cpt1+nomSmileys.length;
    								  trouve=1;
    							  }
     
    						   }
    					   }
    					   if(trouve==0)
    							  doc.insertString(doc.getLength(), ""+msg.charAt(cpt1), doc.getStyle("regular"));
    				   }
     
    			   }
     
     
    		   }
    	   }
    Le texte s'affiche bien et je suis certain qu'il passe au bon endroit car il m'affiche le "System.out.println("images\\"+nomSmileys[cpt2]+".jpg"); "

    Voila , merci d'avance !

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Tel que je comprends ton code, par l'instruction StyleConstants.setIcon(s, monSmil), tu donnes à l'ensemble modifiable d'attributs s la propriétés d'afficher l'icone monSmil.

    Mais à quel moment associes-tu cet ensemble d'attributs à un texte inséré dans le document ?

  3. #3
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Par défaut
    Au desssus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     s = doc.addStyle("icon", regular);
           StyleConstants.setAlignment(s, StyleConstants.ALIGN_CENTER);
     
     
           if (monSmil != null) {
               StyleConstants.setIcon(s, monSmil);
           }
    Et lorsque je trouve un smiley , je remplace l'icon en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    monSmil= new ImageIcon("images\\"+nomSmileys[cpt2]+".jpg");
    								  if (monSmil != null) {
    							            StyleConstants.setIcon(s, monSmil);
    							        }
    et à la ligne suivante je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    doc.insertString(doc.getLength(), "", doc.getStyle("icon"));
    Si j'ai bien compris , cette ligne appelle le style "icon" du "s" , qui à comme icône celui que je viens d'insérer..

    Merci de votre intérêt !

  4. #4
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Oui, mais il me semble que le problème avec cette approche, est que votre style icon est le même pour tous les icons. Certes cela dépend comment fonctionne en interne swing.text (qui est très loin d'être intuitive) ; si elle sauvegarde l'état des attributs à chaque affectation à un texte, ça va. Mais si elle conserve l'objet attribut lui même, j'ai l'impression que votre code ne fonctionnera pas. (je crois que swing.text parvient à faire les deux à la fois, ce qui est très compliqué à comprendre).

    Perso je créerais, à partir de votre s, un nouvel MutableAttributesSet à chaque fois (ou peut être seulement pour chaque nouvel icon), et je l'associerais à un texte spécifique.

    Avec swing.text il faut essayer, et si ça marche, souffler.

  5. #5
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Par défaut
    Oulalaaaa , je ne vois pas ce qu'est un "MutableAttributesSet"
    J'vais essayer tout ça cet après-midi..

    Je m'étais inspiré d'un exemple de java sun.. on a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     try {
                for (int i=0; i < initString.length; i++) {
                    doc.insertString(doc.getLength(), initString[i],
                                     doc.getStyle(initStyles[i]));
                }
    avec initString[i] qui vaut " " et initStyles[i] qui vaut "icon"
    Icon était défini préalablement comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     s = doc.addStyle("icon", regular);
            StyleConstants.setAlignment(s, StyleConstants.ALIGN_CENTER);
            ImageIcon pigIcon = createImageIcon("images/Pig.gif",
                                                "a cute pig");
            if (pigIcon != null) {
                StyleConstants.setIcon(s, pigIcon);
            }
    Etrange..

  6. #6
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Par défaut
    Et bien voilà..
    Pour ceux que ça interesse ...
    J'ai trouvé le problème..

    Mon raisonnement était bon , on peut de cette manière insérer des smileys..
    Le problème était : accroché vous bien !! UN ESPACE

    En effet , à la place de "" , il fallait mettre biensure " "

    J'me cognerais bien la tête dans le mur... tant d'heure de recherche pour ça !

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

Discussions similaires

  1. Insertion image dans un JTextPane avec balise html img
    Par Invité dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 10/01/2012, 16h04
  2. probleme d affichage d image dans un jtextpane
    Par capadona dans le forum Composants
    Réponses: 4
    Dernier message: 11/05/2009, 23h15
  3. Coller une image (Ctrl+V) dans un jTextPane / jEditorPane
    Par fraco dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 20/10/2008, 17h43
  4. Insérer une image dans un JTextPane
    Par Silverstone dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 16/08/2007, 14h58
  5. Comment centrer une image insérée dans un JtextPane ?
    Par med_anis_dk dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 07/06/2007, 21h23

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