Java JList自定义渲染器和HTML

Java JList自定义渲染器和HTML,java,swing,jeditorpane,Java,Swing,Jeditorpane,我想制作一个JListh,它将在它们的单元格中显示我的html代码,因此我: public class HtmlCellRenderer extends DefaultListCellRenderer{ /** * */ private static final long serialVersionUID = 1L; /** * */ public static final int CONST_PREFERED_HE

我想制作一个JListh,它将在它们的单元格中显示我的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>"
“Test1
测试”
在执行toString时,list entry对象将返回此字符串。

而不是:

return label;
尝试使用以下方法:

return htmlPane;
而不是:

return label;
尝试使用以下方法:

return htmlPane;

“你有什么想法吗?”为了更快地获得更好的帮助,请发布一个.
label.setPreferredSize(新尺寸(50,CONST_preferred_HEIGHT))
如果在样式化的
JComponent
中使用HTML,那么在HTML中的样式中设置组件的大小同样有意义(或者说没有意义,具体取决于您的查看方式)。更好的是,您可以设置其中一个宽度或高度,并让另一个根据内容的需要进行调整。无关:a)不要在GetXXRenderComponent中创建组件,而是在构造函数中创建并重新使用b)不要错误地将JLabel用作容器,相反,实现一个直接出售组件的渲染器或一个包含组件的通用容器(JPanel)c)不要硬编码调整大小hintskleopatra:谢谢你刚刚这么做:)“你有什么想法吗?”为了更快地获得更好的帮助,请发布一个。
label.setPreferredSize(新尺寸(50,CONST_PREFERED_HEIGHT))
如果在样式化的
JComponent
中使用HTML,那么在HTML中的样式中设置组件的大小同样有意义(或者说没有意义,具体取决于您的查看方式)。更好的是,您可以设置其中一个宽度或高度,并让另一个根据内容的需要进行调整。无关:a)不要在GetXXRenderComponent中创建组件,而是在构造函数中创建并重新使用b)不要错误地将JLabel用作容器,相反,实现一个直接出售组件的渲染器或一个包含组件的通用容器(JPanel)c)不要硬编码大小hintskleopatra:谢谢,刚刚做了:)。现在Jlist绘制html代码,但它不能正常工作,因此我无法选择我的单元格。我猜通常我必须返回标签,因为它已经在JList中注册,或者找到替换此标签的方法。“我猜…”停止猜测并发布SSCCE。然后我可以给你比“试试这个”更好的答案。现在Jlist绘制html代码,但它不能正常工作,所以我无法选择我的单元格。我猜通常我必须返回标签,因为它已经在JList中注册,或者找到替换此标签的方法。“我猜…”停止猜测并发布SSCCE。那么我可以给你比“试试这个”更好的答案。