简体   繁体   English

Java:将JTable中的HTML代码显示为纯文本

[英]Java: Displaying HTML code in a JTable as plain text

As soon as I have some string like <html><i>something <b>bold</b></i></html> and I display that in a standard cell of a JTable it get's interpreted and shown as " something bold ". 一旦我有一些字符串,如<html><i>something <b>bold</b></i></html> ,我在JTable的标准单元格中显示它,它被解释并显示为“ 某事大胆 “。

Is there some simple solution / what is best practice to show the HTML code as plain text? 是否有一些简单的解决方案/将HTML代码显示为纯文本的最佳做法是什么? So I see in the JTable cell the original <html><i>something<b>bold</b></i></html> ? 所以我在JTable单元格中看到原来的<html><i>something<b>bold</b></i></html>

Can't be that difficult, but I don't see how to work around the automatism in JTable. 不能那么难,但我不知道如何解决JTable中的自动化问题。 Thanks. 谢谢。

ps: this was no real duplicate as it wasn't asking for JLabel but for JTable, the solution from How to disable the automatic HTML support of JLabel? ps:这不是真正重复,因为它不是要求JLabel而是要求JTable, 如何禁用JLabel的自动HTML支持的解决方案 would disable HTML in all columns, the accepted answer does what I asked for, the answer in the suggested duplicate does not. 将禁用所有列中的HTML,接受的答案按照我的要求进行,建议的副本中的答案不会。

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);
    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM