Using ­ in Java HTML aware Component

浪子不回头ぞ 提交于 2019-12-09 21:52:45

问题


I have following problem:

I display an HTML-Document with an JTextPane.

In my HTML-Text there are ­ (shy at w3.org) to make a soft-hyphenation. My problem is, that no hyphenation appears. Is there some kind of flag, which I don't know, to use these option?

Following Programm will show the problem:

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;
    }

}

My expected behavior is, that my text will be broken to the next line:

longlong- 
longlong-
longlonglonglongWord

As seem by the first block, but with an hyphenation-sign.

EDIT: It will work in most browsers, but I don't use a webbrowser here.

EDIT 2: I use a JTextPane, I don't know, if Java will use some installes HTML rendering-engine internally.


回答1:


http://java-sl.com/Hyphenation_In_JEditorPane.html That's an example of custom hyphnation. You can use the same approach and change the HTMLEditorKit to use your hyphens.




回答2:


Many browsers do not handle this character. It is preferable to use the name of the entity (&shy;) instead of the ISO numeric entity (&#173;).

But this entity is pretty bad handled by most browsers.

&#8203; is just a zero width space character.

The simpler is: (but the hyphen is always visible...)

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

And you can even try this (but I don't think that you see your hyphen...):

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

But I don't understand why you insert plain-text just after an <html> node, this should not ease the task of the browser, isn't it?

Otherwise, on what browser(s) do you test your code? Because this work perfectly on the lastest versions of Chrome and Firefox:

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

Anyway you'll may be interested by the <wbr> tag, and this article dedicated to the soft hyphen problem...



来源:https://stackoverflow.com/questions/4164991/using-shy-in-java-html-aware-component

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!