java - JTextPane 中的 HTML 表格显示奇怪的 "form"框

标签 java html html-table jtextpane

我正在尝试将 html 表格放入可编辑的 JTextPane 中。因此,您可以像编辑 Excel 工作表一样编辑其中的表格。当我尝试这样做时,这些奇怪的 col 和 colgroup 框不断出现。此外,该表似乎没有像预期的那样工作..

这是一个例子:

            import java.awt.BorderLayout;
            import java.awt.EventQueue;
            import javax.swing.JFrame;
            import javax.swing.JPanel;
            import javax.swing.JTextPane;
            import javax.swing.border.EmptyBorder;
            import javax.swing.text.Document;
            import javax.swing.text.html.HTMLEditorKit;
            import javax.swing.text.html.StyleSheet;

            public class htmlEditor2 extends JFrame {
                private JPanel contentPane;
                public static void main(String[] args) {
                    EventQueue.invokeLater(new Runnable() {
                        public void run() {
                            try {
                                htmlEditor2 frame = new htmlEditor2();
                                frame.setVisible(true);
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    });
                }
                public htmlEditor2() {
                    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    setBounds(100, 100, 450, 300);
                    contentPane = new JPanel();
                    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
                    contentPane.setLayout(new BorderLayout(0, 0));
                    setContentPane(contentPane);
                    Foo f = new Foo();
                    f.setText("<html><body><table border=\"1\" width=\"985\" cellpadding=\"3\" cellspacing=\"0\" style=\"table-layout: fixed; border-collapse: collapse; border-width: 0px; border-color: #010101; \"><colgroup><col width=\"328\"></col>        <col width=\"328\"></col>        <col width=\"328\"></col>    </colgroup><tr><td align=\"left\" valign=\"top\" width=\"321\" style=\"border: solid #010101 1px; \"><div align=\"left\"><font face=\"Arial\"><span style=\"font-size:8pt\">row 1</span></font></div></td><td align=\"left\" valign=\"top\" width=\"321\" style=\"border: solid #010101 1px; \"><div align=\"left\"><font face=\"Arial\"><span style=\"font-size:8pt\">row2</span></font></div></td><td align=\"left\" valign=\"top\" width=\"321\" style=\"border: solid #010101 1px; \"><div align=\"left\"><font face=\"Arial\"><span style=\"font-size:8pt\">row3</span></font></div></td></tr><tr><td align=\"left\" valign=\"top\" width=\"321\" style=\"border: solid #010101 1px; \"><div align=\"left\"><span style=\"font-size: 8pt;\">&nbsp;</span></div></td><td align=\"left\" valign=\"top\" width=\"321\" style=\"border: solid #010101 1px; \"><div align=\"left\"><span style=\"font-size: 8pt;\">&nbsp;</span></div></td><td align=\"left\" valign=\"top\" width=\"321\" style=\"border: solid #010101 1px; \"><div align=\"left\"><span style=\"font-size: 8pt;\">&nbsp;</span></div></td></tr><tr><td align=\"left\" valign=\"top\" width=\"321\" style=\"border: solid #010101 1px; \"><div align=\"left\"><span style=\"font-size: 8pt;\">&nbsp;</span></div></td><td align=\"left\" valign=\"top\" width=\"321\" style=\"border: solid #010101 1px; \"><div align=\"left\"><span style=\"font-size: 8pt;\">&nbsp;</span></div></td><td align=\"left\" valign=\"top\" width=\"321\" style=\"border: solid #010101 1px; \"><div align=\"left\"><span style=\"font-size: 8pt;\">&nbsp;</span></div></td></tr></table><div align=\"left\">&nbsp;&nbsp;</div></body></html>");
                    contentPane.add(f);
                }
                class Foo extends JTextPane {
                    public Foo() {
                        super();
                        HTMLEditorKit kit = new HTMLEditorKit();
                        setEditorKit(kit);
                        StyleSheet styleSheet = kit.getStyleSheet();
                        styleSheet.addRule(""); //in case I need to add a CSS
                        Document doc = kit.createDefaultDocument();
                        setDocument(doc);
                    }
                }
            }

我会粘贴一个格式良好的 html 版本,但我不确定如何在此处执行...

是的..我只是想知道如何摆脱我表格中那些奇怪的 colgroup 和 col 框以及如何使表格正常工作!

更新:事实证明,我从自动格式化 html 表中检索 html 表的服务包含 <colgroup><col>标签。所以我有一些后续问题:Does JTextPane support current html versions?当然,如何让 JTextPane 不显示那些奇怪的框?

最佳答案

JTextPane 仅支持 HTML 3.2 标记,因此较新的标记不会像在最新的浏览器中那样出现。

与其尝试修改 HTML,不如使用第 3rd 方库,例如 Cobra 显示内容:

HtmlPanel panel = new HtmlPanel();
new SimpleHtmlRendererContext(panel, new SimpleUserAgentContext()).navigate("http://myhost/mytable.jsp");

关于java - JTextPane 中的 HTML 表格显示奇怪的 "form"框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13317265/

相关文章:

javascript - 删除一列的重复单元格:html

javascript - 如何将 <td> 的 name 属性发送给函数?

css - 响应式 css 表,多行包含多个可缩放图像

java - 为什么 Android 小部件中的可运行 View 未更新?

java - 将 HashMap 中的字符串传递给另一个 Activity

java - 如何从excel中获取名称框?

javascript - 我想创建自己的标签,例如 <store></store>、<market></market>

java - 比使用 If Else 循环更简单的方法来排序哪个字符串更大?

javascript - 样式化 javascript 函数 *显示/隐藏* CSS/HTML/JS

html - 为什么只读输入字段无效