2009-10-20 11 views
0

J'ai ce code dans un ListCellRenderer qui étend JEditorPane. Le volet de l'éditeur n'affiche pas l'image mais affiche une "icône cassée". Qu'est ce qui ne va pas avec ça?balise img cassée avec JEditorPane/ListCellRenderer

public class TweetCellRenderer extends JEditorPane implements ListCellRenderer { 

    public Component getListCellRendererComponent(
     javax.swing.JList list, 
     Object value, 
     int index, 
     boolean isSelected, 
     boolean cellHasFocus 
    ) { 

     setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 6)); 

     StringBuffer sb = new StringBuffer(); 

     setContentType("text/html"); 

     sb.append("<html><body>"); 
     sb.append("<img src='http://www.google.co.uk/images/firefox/video.png' />"); 

     sb.append("</body></html>"); 

     System.out.println(sb); 

     setText(sb.toString()); 

     setBackground(isSelected ? SELECTED_BG : BG);   
     setForeground(isSelected ? SELECTED_FG : FG); 

     return this; 
    } 
} 

Répondre

0

Chaque fois que la cellule est rendue, le HTML obtient parsé à nouveau. L'utilisation de HTML dans les moteurs de rendu entraîne souvent des performances médiocres, ce qui n'est pas surprenant. Si le code HTML vient juste d'être analysé, je suppose qu'il n'y a pas eu le temps de commencer le chargement incrémentiel des images. Habituellement, le HTML serait ajouté au composant et il y aurait alors un délai pendant que l'événement repaint se produirait, ce qui permettrait le chargement de l'image dans un thread séparé pour faire son travail.

Vous pouvez probablement vous en sortir en retournant un composant associé à chaque cellule.

0

Créez un ImageIcon à partir de l'URL, puis ajoutez l'icône au modèle de liste. Je pense que JList a un moteur de rendu defautl pour les icônes.

+0

J'ai essayé d'utiliser un ImageIcon. Cela fonctionnait quand mon CellRenderer était un JLabel avec une icône attachée, et du texte. Mais j'ai besoin d'avoir des hyperliens dans le texte, donc j'ai besoin d'utiliser un JEditorPane. J'ai essayé d'étendre JPanel et d'ajouter un ImageIcon (à l'intérieur de JLabel) et JEditorPane au JPanel mais cela ne fonctionne pas non plus - les images/texte sont dupliqués plusieurs fois les uns sur les autres pour une raison quelconque. Je souhaite que chaque élément du JList affiche une image 48x48 à gauche et à droite du texte formaté avec des liens hypertexte. Comment puis-je faire ceci? Merci –