2012-11-09 64 views
2

我想把一個html表格放入一個可編輯的JTextPane中。所以你可以像Excel表格一樣編輯表格。當我嘗試這樣做時,這些奇怪的col和colgroup盒子不斷出現。另外,表中似乎不工作就像他們應該..JTextPane中的HTML表格顯示奇怪的「表格」框

下面是一個例子:

  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表格從autoformats的HTML表格,包括<colgroup><col>標籤。所以我有一些後續問題:JTextPane是否支持當前的html版本?當然,我如何讓JTextPane不顯示那些奇怪的盒子?

回答

0

我的解決方案是隻使用一個String.replaceAll()並刪除了我不想要的一切。我知道這似乎很奇怪.. buuut。目前。這是我的解決方案。謝謝你的回答。當我有機會時,我將不得不考慮你的解決方案。

1

JTextPane僅支持HTML 3.2標記,因此新標記不會像最新瀏覽器中那樣顯示。

,而不是試圖修改你可以使用一個3 黨庫如Cobra的HTML中顯示的內容:

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

你是個天才。我拿出了和標籤,它的一切都很好。謝謝! – Ted

+0

嗨。我更新了這個問題。事實證明,我正在檢索html的服務會自動重新格式化html代碼,以包含表格的和標籤。所以問題仍然存在...... :( – Ted

+0

如果你可以指向一個URL,你可以使用我上面給出的解決方案。 – Reimeus