2011-11-26 74 views
0

我想作一个JListh将细胞中都有我的HTML代码,所以我做的:JList的自定义渲染和HTML

public class HtmlCellRenderer extends DefaultListCellRenderer{ 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    /** 
    * 
    */ 
    public static final int CONST_PREFERED_HEIGHT = 200; 

    /** 
    * 
    */ 
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean hasFocus) { 
     JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, hasFocus); 
     label.setPreferredSize(new Dimension(50, CONST_PREFERED_HEIGHT)); 
     if (value != null) { 
      ExtendedJEditorPane htmlPane = new ExtendedJEditorPane(); 
      label.setLayout(new BorderLayout()); 
      htmlPane.setEditable(false); 
      htmlPane.setContentType("text/html"); 
      htmlPane.setText(value.toString()); 
      label.add(htmlPane, BorderLayout.CENTER); 
     } 

     return label; 
    } 
} 

自定义渲染器。在这里,我创建了一个新的JEditPane(为了在我的html中绘制一些自定义标签,我将其扩展)并将其插入到单元格的标签中,但结果是我的单元格不能识别该html并打印原始文本。

输入的文字:

"<table><tr><td rowspan=\"2\"><img src=\"data:image/jpeg;base64,"+myImageData+\" align=\"left\" /></td><td><h3>Test1 </h3><hr></td></tr><tr><td><p>Test</td></tr></table>" 

列表条目对象将在执行的toString的情况下,返回此字符串。

+0

* “?你有什么想法” *为了更好地帮助越早,张贴[SSCCE(HTTP:// SSCCE .org等/)。 –

+0

'label.setPreferredSize(new Dimension(50,CONST_PREFERED_HEIGHT));'如果在一个带风格的'JComponent'中使用HTML,它就像设置组件大小一样有意义(或废话,取决于你如何查看它)在HTML中的样式中。更好的是,您可以设置其中一个宽度或高度,并根据需要调整其他内容。 –

+2

不相关:a)不要在getXXRendererComponent中创建组件,而是在构造函数中创建并重新使用b)不要错误地将JLabel作为容器使用,而是实现一个呈现器,该呈现器可以直接发布组件或通用容器(JPanel)包含组件c)不要硬编码大小提示 – kleopatra

回答

3

相反的:在使用本

return label; 

尝试:

return htmlPane; 
+0

现在Jlist绘制html代码,但它不能正常工作,所以我不能选择我的单元格。我想通常我必须返回标签,因为它已经在JList中注册了,或者找到替换这个标签的方法。 – AlexTheo

+2

*“我猜...”*停止猜测并发布SSCCE。那么我可以给你比'试试这个'更好的答案。 –