2009-10-20 4 views
0

У меня есть этот код в ListCellRenderer, который расширяет JEditorPane. Панель редактора не отображает изображение, но вместо этого отображается «сломанный значок». Что с этим не так?сломанный тег img с 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; 
    } 
} 

ответ

0

Каждый раз, когда ячейка визуализируется, HTML снова обрабатывается. Использование HTML в рендерерах часто приводит к плохой производительности, что неудивительно. Если HTML только что разобран, я думаю, что не было времени, чтобы начать инкрементную загрузку изображений. Обычно HTML будет добавлен к компоненту, и тогда будет задержка, пока произойдет событие repaint, что позволяет загружать изображения в отдельный поток, чтобы делать свои вещи.

Возможно, вам удастся вернуть компонент, связанный с каждой ячейкой.

0

Создайте ImageIcon из URL-адреса, а затем добавьте значок в модель списка. Я думаю, что JList имеет средство defautl для значков.

+0

Я пробовал использовать ImageIcon. Он работал, когда мой CellRenderer был JLabel с прикрепленным значком и текстом. Но мне нужно иметь гиперссылки в тексте, поэтому мне нужно использовать JEditorPane. Я попытался расширить JPanel и добавить ImageIcon (внутри JLabel) и JEditorPane в JPanel, но это тоже не сработает - изображения или текст дублируются много раз друг над другом по некоторым причинам. Я хочу, чтобы каждый элемент в JList отображал изображение 48x48 слева и справа отформатированного текста с гиперссылками. Как я могу это сделать? Спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^