Swing组件中的HTML格式文本不会显示

时间:2011-04-27 16:43:45

标签: java html swing

我最近遇到了奇怪的情况;我的Swing组件中的HTML格式文本不会显示。我搜索了类似的问题,并找到了one,但它似乎没有解决适用于我的案例的解决方案(即使有一个接受的答案)

我还参加了Oracle tutorials上的HtmlDemo课程。从那里复制到我的项目的代码不起作用,就像我自己的代码没有。但是,如果我编译整个项目,或通过JWS运行它,一切看起来都不错。

我试图用较小的案例(例如评论JLabel s)来解决问题,但仍然没有乐趣。目前我真的很困惑;几乎可以肯定我错过了某个地方的细节,但似乎无法找到它。

下面是一个方法,它返回JScrollPane放置在JTabbedPane中,该方法应该描述代码的相关部分。哦,顺便说一句,我目前正在使用Sun JDK 1.6.0 Java(TM) SE Runtime Environment (build 1.6.0_24-b07)

感谢任何帮助/评论!


JTabbedPane tabbedPane = new JTabbedPane(); 

JComponent panel1 = makeInfoPanel(v);
tabbedPane.addTab("Node Info", null, panel1,"info");
tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);

JComponent panel2 = makeDetailsPanel(v);
tabbedPane.addTab("Details", null, panel2,"other info");
tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);

protected JComponent makeInfoPanel(Node v) {
    JPanel panel = new JPanel();
    panel.setPreferredSize(new Dimension(400,200));
    panel.setLayout(new GridLayout(0,1));

    //JLabel title = new JLabel("<html><b><u>T</u>wo</b><br>lines</html>");
    String msg = "Below are the items this node represents";
    //JLabel title = new JLabel("<html><font size=-2>" + msg +"</font></html>");
    JLabel title = new JLabel(msg);
    title.setHorizontalAlignment(JLabel.LEFT);
    panel.add(title);

    JLabel stuff = new JLabel();
    StringBuilder labelText = new StringBuilder("<html><h3>Items</h3>");
    for(Stuff s : v.getStuff()){
        labelText.append("<font size=8><i>" + s.getName() + "</i></font>");
        labelText.append("&nbsp;nbsp;&nbsp; <font size=6>" + s.getDb().toUpperCase() + "</font>");
        labelText.append("<br>");
    }

    labelText.append("</html>");
    stuff.setText(labelText.toString());

    panel.add(stuff);

    return new JScrollPane(panel);
}

1 个答案:

答案 0 :(得分:4)

尝试Bug ID 7008526底部显示的修复程序。

这是我在使用HTML呈现的applet中实现修复的方法。

public void init() {
    // Solves an applet/HTML parsing bug.
    ParserDelegator parserDelegator = new ParserDelegator();
    System.out.println("parserDelegator set: "+ parserDelegator);

通过创建显式解析器委托器并存储对它的引用,它永远不会重新创建,因此不会触发错误。