在Java中使用HTML感知组件

时间:2010-11-12 13:17:34

标签: java html swing jtextpane soft-hyphen

我有以下问题:

我使用JTextPane显示HTML文档。

在我的HTML文本中,­ (shy at w3.org)可以进行软连字。 我的问题是,没有连字符出现。是否有某种旗帜,我不知道,使用这些选项?

遵循Programm将显示问题:

package com.dvelop.ckue.swing;

import javax.swing.*;
import javax.swing.text.html.HTMLEditorKit;
import java.awt.*;

public class SwingGui extends JFrame {

    public static void main(String[] args) {
        SwingGui sg = new SwingGui();
        sg.setSize(new Dimension(200, 800));
        sg.setPreferredSize(new Dimension(200, 800));
        sg.pack();
        sg.setVisible(true);
        sg.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private SwingGui() {
        super();
        setLayout(new FlowLayout());

        // No "-" appears, but a linebreak
        add(createField("<html>longlong<br>longlong<br>longlonglonglonglonglonglonglonglonglongWord"));
        // No linebreak, but the hyphenationsymbol
        add(createField("<html>longlong&shy;longlong&shy;longlonglonglonglonglonglonglonglonglongWord"));
        // Linebreak, but not where expected and no symbol            
        add(createField("<html>longlong&#8203;longlong&#8203;longlonglonglonglonglonglonglonglonglongWord"));
        // No linebreak, no symbol
        add(createField("<html>longlonglonglonglonglonglonglonglonglonglonglonglonglongWord"));
    }

    private JTextPane createField(String content) {
        JTextPane field1 = new JTextPane();
        field1.setPreferredSize(new Dimension(100, 200));
        field1.setAutoscrolls(true);
        field1.setEditorKit(new HTMLEditorKit());
        field1.setText(content);
        return field1;
    }

}

我的预期行为是,我的文字将被分解到下一行:

longlong- 
longlong-
longlonglonglongWord

看起来像第一个街区,但带有连字号。

修改 它适用于大多数浏览器,但我不在这里使用webbrowser。

编辑2: 我使用JTextPane,我不知道,如果Java将在内部使用一些安装HTML呈现引擎。

2 个答案:

答案 0 :(得分:3)

许多浏览器都无法处理此角色。最好使用实体名称(&shy;)而不是ISO数字实体(&#173;)。

但是大多数浏览器都处理这个实体很糟糕。

&#8203;只是zero width space character

更简单的是:(但连字符始终可见......)

<p>longlonglong-&#8203;longlonglong</p>

你甚至可以试试这个(但我不认为你看到你的连字符......):

<p>longlonglong&shy;&#8203;longlonglong</p>

但是我不明白为什么你在<html>节点之后插入纯文本,这不应该简化浏览器的任务,不是吗?

否则,您在哪些浏览器上测试代码?因为这完全适用于最新版本的Chrome和Firefox:

<p>longlonglong&shy;longlonglong</p>

无论如何,您可能会对<wbr> tagthis article dedicated to the soft hyphen problem感兴趣...

答案 1 :(得分:1)

http://java-sl.com/Hyphenation_In_JEditorPane.html 这是自定义节奏的一个例子。您可以使用相同的方法并更改HTMLEditorKit以使用连字符。