java - 在 Java HTML 感知组件中使用

标签 java html swing jtextpane soft-hyphen

我有以下问题:

我使用 JTextPane 显示 HTML 文档。

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

以下程序将显示问题:

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

与第一个 block 看起来一样,但带有连字符。

编辑: 它适用于大多数浏览器,但我在这里不使用网络浏览器。

编辑2: 我使用 JTextPane,我不知道 Java 是否会在内部使用一些安装的 HTML 渲染引擎。

最佳答案

许多浏览器不处理该字符。最好使用实体名称 ( &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> tag感兴趣。 ,和this article dedicated to the soft hyphen problem ...

关于java - 在 Java HTML 感知组件中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4164991/

相关文章:

java - 将数组列表中的随机项目放入 JLabel

html - 不间断的破折号,而不是连字符

java - 获取jpanels的arraylist中某个容器的索引号

java - 使用 A* 算法解决 8 拼图板(Board 数据类型工作正常)

java - 这个示例代码是简单的还是有理由在这里使用 interrupt()

java - 使用arraylist而不是array

java - 创建一个逐步更新 JPanel 的 ActionListener

javascript - 如何避免无法将属性 'innerHTML' 设置为 null?

javascript - 为 html 文本区域中的新行添加效果

java - 用于 Olap 分析的 Swing 组件