我想作一个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的情况下,返回此字符串。
* “?你有什么想法” *为了更好地帮助越早,张贴[SSCCE(HTTP:// SSCCE .org等/)。 –
'label.setPreferredSize(new Dimension(50,CONST_PREFERED_HEIGHT));'如果在一个带风格的'JComponent'中使用HTML,它就像设置组件大小一样有意义(或废话,取决于你如何查看它)在HTML中的样式中。更好的是,您可以设置其中一个宽度或高度,并根据需要调整其他内容。 –
不相关:a)不要在getXXRendererComponent中创建组件,而是在构造函数中创建并重新使用b)不要错误地将JLabel作为容器使用,而是实现一个呈现器,该呈现器可以直接发布组件或通用容器(JPanel)包含组件c)不要硬编码大小提示 – kleopatra