只要我有一些类似<html><i>something <b>bold</b></i></html>
的字符串,并且我在JTable的标准单元格中显示它就会被解释并显示为“ 粗体 ”
是否有一些简单的解决方案/将HTML代码显示为纯文本的最佳做法是什么?所以我在JTable单元格中看到原始的<html><i>something<b>bold</b></i></html>
?
不能那么难,但我不知道如何解决JTable中的自动化问题。感谢。
ps:这不是真正重复,因为它不是要求JLabel,但是对于JTable,来自How to disable the automatic HTML support of JLabel?的解决方案会禁用所有列中的HTML,接受的答案就是我要求的,答案是建议重复没有。
答案 0 :(得分:3)
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
public class TestFrame extends JFrame {
public TestFrame() {
super("Sample Project");
setSize(500, 200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static class RawHtmlRenderer extends DefaultTableCellRenderer {
public RawHtmlRenderer() {
putClientProperty("html.disable", Boolean.TRUE);
}
}
public static void main(String[] str) {
Object[][] rowData = new Object[][] {
{ "test", "<html><i>something<b>bold</b></i></html>" },
{ "test", "test" }, { "test", "123" } };
String[] header = new String[] { "Column 1", "Column 2" };
JTable table = new JTable(rowData, header);
TestFrame frame = new TestFrame();
table.getColumnModel().getColumn(1).setCellRenderer( new RawHtmlRenderer() );
frame.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
frame.setVisible(true);
}
}