2010-11-12 2 views
2

я следующая проблема:Использование ­ в Java HTML осознает компонент

я отображать HTML-документ с JTextPane.

В моем HTML-тексте есть ­(shy at w3.org), чтобы сделать soft-hyphenation. Моя проблема в том, что перенос не переносится. Есть ли какой-то флаг, который я не знаю, чтобы использовать эту опцию?

После 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 

Как кажется на первый блок, но с знак переноса.

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

EDIT 2: Я использую JTextPane, я не знаю, если Java будет использовать некоторые installes HTML рендеринга-двигателя внутри.

ответ

1

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

+0

С вашим ответом я бы смог сделать то, что хотел. Но я изменил что-то в моем buildprocess, поэтому мне не нужно менять перенос. (Фактически я удалил все '­') –

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> tag и this article dedicated to the soft hyphen problem ...

+0

Ну, я не показываю это в браузере. Фактически, это отображение информации о моей лицензии на компьютер при установке приложения. Установщик является Java-Swing-приложением. Информация о лицензировании - это хорошо продуманный HTML-документ (он должен долго показывать его здесь) –

+0

Итак, что такое движок рендеринга html (Cobra, Webkit, Gecko, Trident ...) и что DTD вы используете для проверки своего хорошо сформированный HTML? –

+0

Механизм рендеринга - встроенный движок 'java.swing.JTextPane'. Я не знаю, какой DTD используется, я посмотрю в понедельник. –