2

次の問題があります:

JTextPane を使用して HTML ドキュメントを表示します。

私の HTML テキストには、­ (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

最初のブロックのように見えますが、ハイフネーション記号が付いています。

編集: ほとんどのブラウザーで動作しますが、ここでは Web ブラウザーを使用しません。

編集 2: 私は JTextPane を使用していますが、Java がインストールされている HTML レンダリング エンジンを内部的に使用するかどうかはわかりません。

4

2 に答える 2

3

多くのブラウザはこの文字を処理しません。&shy;ISO数値エンティティ()の代わりにエンティティの名前()を使用することをお勧めします&#173;

しかし、このエンティティはほとんどのブラウザでかなりうまく処理されていません。

&#8203;ゼロ幅スペース文字です。

より単純なのは:(ただし、ハイフンは常に表示されます...)

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

そして、これを試すこともできます(ただし、ハイフンが表示されるとは思いません...):

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

しかし、ノードの直後にプレーンテキストを挿入する理由がわかりません<html>。これでブラウザのタスクが簡単になるわけではありませんね。

それ以外の場合、どのブラウザでコードをテストしますか?これはChromeとFirefoxの最新バージョンで完全に機能するため:

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

とにかくあなたは<wbr>タグに興味があるかもしれません、そしてこの記事はソフトハイフンの問題に捧げられています...

于 2010-11-12T13:46:50.327 に答える
1

http://java-sl.com/Hyphenation_In_JEditorPane.html カスタム ハイフネーションの例です。同じアプローチを使用して、ハイフンを使用するように HTMLEditorKit を変更できます。

于 2010-11-14T08:52:31.533 に答える