2010-11-12 9 views
2

Je le problème suivant:Utiliser ­ dans Java conscient HTML Component

J'afficher un document HTML avec un JTextPane.

Dans mon texte HTML, il y a ­(shy at w3.org) pour faire une césure. Mon problème est, qu'aucune césure n'apparaît. Y at-il une sorte de drapeau, que je ne connais pas, pour utiliser ces options?

Après Programm présente le problème:

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

} 

Mon comportement attendu est que mon texte sera rompu à la ligne suivante:

longlong- 
longlong- 
longlonglonglongWord 

Comme semblent le premier bloc, mais avec un signe de césure.

EDIT: Cela fonctionnera dans la plupart des navigateurs, mais je n'utilise pas de navigateur Web ici.

EDIT 2: J'utilise un JTextPane, je ne sais pas, si Java utilisera certains installes HTML de rendu moteur interne.

Répondre

1

http://java-sl.com/Hyphenation_In_JEditorPane.html C'est un exemple de hyphnation personnalisé. Vous pouvez utiliser la même approche et modifier le HTMLEditorKit pour utiliser vos traits d'union.

+0

Avec votre réponse je serais en mesure de faire, ce que je voulais faire. Mais j'ai changé quelque chose dans mon processus de construction, donc je n'ai pas besoin de changer la césure. (En fait j'ai enlevé tout '­') –

3

De nombreux navigateurs ne gèrent pas ce caractère. Il est préférable d'utiliser le nom de l'entité (&shy;) au lieu de l'entité numérique ISO (&#173;).

Mais cette entité est plutôt mauvaise gérée par la plupart des navigateurs.

&#8203; est juste un zero width space character.

Le plus simple est la suivante: (mais le trait d'union est toujours visible ...)

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

Et vous pouvez même essayer (mais je ne pense pas que vous voyez votre trait d'union ...):

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

Mais je ne comprends pas pourquoi vous insérez-le texte brut juste après un nœud <html>, cela ne devrait pas faciliter la tâche du navigateur, est-ce pas?

Sinon, sur quel (s) navigateur (s) testez-vous votre code? Parce que ce travail parfaitement sur les dernières versions de Chrome et Firefox:

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

Quoi qu'il en soit, vous pouvez être intéressé par le <wbr> tag et this article dedicated to the soft hyphen problem ...

+0

Eh bien, je ne l'affiche pas dans un navigateur. En fait, c'est l'affichage de mes informations de licence compancys lors de l'installation d'une application. Le programme d'installation est une application Java-Swing. L'information de licence est un document HTML bien formaté (il est long de le montrer ici) –

+0

Ok, alors, quel est le moteur de rendu html (Cobra, Webkit, Gecko, Trident ...), et quelle DTD utilisez-vous pour valider votre HTML bien formé? –

+0

Le moteur de rendu est le moteur intégré 'java.swing.JTextPane'. Je ne sais pas quelle DTD est utilisée, je vais jeter un coup d'oeil à lundi. –