将HTML内容设置为JTextPane会混淆System.out重定向

时间:2014-05-02 20:31:22

标签: java html swing text html-table

我正在使用MessageConsole课程将System.outSystem.err重定向到名为JTextPane的{​​{1}}。

我在我的构造函数中配置它:

jMessageConsoleTextPane

并且在NetBeans中我将其设置为contentType jMessageConsoleTextPane.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE); MessageConsole mc = new MessageConsole(jMessageConsoleTextPane, true); mc.redirectOut(null, null); mc.redirectErr(Color.RED, null); mc.setMessageLines(100);

它可以使用text/htmlSystem.out打印所有内容,但这是我的问题。我尝试将System.err的文本设置为基于某些变量创建的html表(其中包含两个其他html表),所以我这样做:

jMessageConsoleTextPane

以下是String htmlTable = WordCounting.getHtmlTable(wordsArrays, hashtagsArrays); jMessageConsoleTextPane.setText(htmlTable); 字符串的外观(直接来自调试器):

htmlTable

以下是<html> <body> <table> <tr> <td> <table border="1"> <th colspan="3">Words used most</th> <tr> <td>1</td> <td>day</td> <td>3720</td> </tr> <tr> <td>2</td> <td>good</td> <td>3354</td> </tr> <tr> <td>3</td> <td>love</td> <td>2689</td> </tr> <tr> <td>4</td> <td>time</td> <td>2372</td> </tr> <tr> <td>5</td> <td>got</td> <td>1897</td> </tr> <tr> <td>6</td> <td>lot</td> <td>1831</td> </tr> <tr> <td>7</td> <td>know</td> <td>1801</td> </tr> <tr> <td>8</td> <td>photo</td> <td>1772</td> </tr> <tr> <td>9</td> <td>girl</td> <td>1755</td> </tr> <tr> <td>10</td> <td>life</td> <td>1754</td> </tr> </table> </td> <td> <table border="1"> <th colspan="3">Hashtags used most</th> <tr> <td>1</td> <td>win</td> <td>136</td> </tr> <tr> <td>2</td> <td>panjaforpunjab</td> <td>105</td> </tr> <tr> <td>3</td> <td>aaronto600k</td> <td>100</td> </tr> <tr> <td>4</td> <td>rt</td> <td>89</td> </tr> <tr> <td>5</td> <td>giveaway</td> <td>85</td> </tr> <tr> <td>6</td> <td>cfc</td> <td>70</td> </tr> <tr> <td>7</td> <td>whybeinarelationshipwhen</td> <td>65</td> </tr> <tr> <td>8</td> <td>retweet</td> <td>64</td> </tr> <tr> <td>9</td> <td>gameinsight</td> <td>64</td> </tr> <tr> <td>10</td> <td>rhoareunion</td> <td>57</td> </tr> </table> </td> </tr> </table> </body> </html>

中的效果

first

然后我尝试使用jMessageConsoleTextPane,它应该打印下面的文字:

System.out

发生了这种情况:

second

基本上所有内容都会添加到第二个表的最后一个单元格中。即使我做[23:19:32] Getting driver... [23:19:32] Connecting to database... [23:19:32] Executing query... 5.6.16 ,也会有一个像这样的唯一表格单元格(左上角):

third

那是怎么回事?为什么还有一个单元格,如何解决?

1 个答案:

答案 0 :(得分:2)

MessageConsole类未设计为与HTML一起使用。所有类都将文本添加到Document的末尾,在您的情况下,它似乎是表的最后一个单元格。

首次创建HTML时,可以尝试向Document添加空HTML标记。然后可能会将文本添加到此标记而不是表格单元格。

可能是这样的:

       </table>
   <p></p>
</body>

这完全取决于Document如何解析插入Document的文本。