Использование в Java компонента, поддерживающего HTML - PullRequest
2 голосов
/ 12 ноября 2010

У меня следующая проблема:

Я отображаю HTML-документ с помощью JTextPane.

В моем HTML-тексте есть ­ (застенчиво на 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

Как видно по первому блоку, но со знаком переноса.

EDIT: Это будет работать в большинстве браузеров, но я здесь не использую веб-браузер.

РЕДАКТИРОВАТЬ 2: Я использую JTextPane, я не знаю, будет ли Java использовать некоторые инсталляции для внутреннего рендеринга HTML-движка.

Ответы [ 2 ]

3 голосов
/ 12 ноября 2010

Многие браузеры не обрабатывают этот символ.Предпочтительно использовать имя объекта (&shy;) вместо числового объекта ISO (&#173;).

Но этот объект довольно плохо обрабатывается большинством браузеров.

&#8203; это просто символ пробела нулевой ширины .

Проще: (но дефис всегда виден ...)

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

И вы можетедаже попробуйте это (но я не думаю, что вы видите ваш дефис ...):

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

Но я не понимаю, почему вы вставляете обычный текст сразу после узла <html>, этоне должно облегчить задачу браузера, не так ли?

Иначе, в каких браузерах вы тестируете свой код?Поскольку это прекрасно работает с последними версиями Chrome и Firefox:

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

В любом случае вас может заинтересовать тег <wbr> и этой статьи, посвященнойпроблема мягких дефисов ...

1 голос
/ 14 ноября 2010

http://java -sl.com / Hyphenation_In_JEditorPane.html Это пример нестандартного гифнации. Вы можете использовать тот же подход и изменить HTMLEditorKit, чтобы использовать ваши дефисы.

...