2008-12-09 16 views
4

J'essaie d'obtenir un JEditorPane pour mettre en évidence toute la largeur d'une ligne affichée. Tous les exemples que j'ai essayés mettent seulement en évidence le contenu textuel. Par exemple, si je le contenu comme celui-ci:Comment puis-je obtenir un JEditorPane pour mettre en évidence la largeur totale d'une ligne (pas seulement le texte)?

--------------------------------- 
|Here is some text    | 
|some more text     | 
--------------------------------- 

dans un JEditorPane représenté par la case ci-dessus, mettant en évidence la première ligne met en évidence que la « Voici un texte » (représenté entre [et] ci-dessous).

--------------------------------- 
[Here is some text]    | 
|some more text     | 
--------------------------------- 

Je voudrais souligner à la largeur de la JEditorPane comme ce qui suit:

--------------------------------- 
[Here is some text    ] 
|some more text     | 
--------------------------------- 

Est-il possible de le faire?

Répondre

4

Cela ne semble pas trop compliqué. Je voudrais en faire un peu code-challenge.

Créez simplement votre propre surligneur personnalisé, en élargissant DefaultHighlighter. Remplacez la méthode paint() et laissez simplement la largeur de la peinture rectangle inchangée: ce sera la largeur du panneau.

Vous trouverez dans DZone Snippets a complete example: copiez-le et exécutez-le. Dites-moi si c'est ce que vous cherchez. Il comprend le textPane.setSelectionColor(new Color(1.0f, 1.0f, 1.0f, 0.0f)); plus vous mentionnez dans votre réponse.

alt text http://www.freeimagehosting.net/uploads/94a3a990e4.png

+0

Merci. C'est très très près de ce que je suis après. Le seul problème est qu'il interagit mal avec la surbrillance de la sélection (en laissant des blocs de texte apparemment sélectionnés traîner après la désélection). Pour ma part, si je pouvais désactiver complètement la sélection, cela ferait probablement l'affaire. –

+0

Ok. Je vais vérifier que plus tard ce jour ou demain – VonC

+0

J'ai trouvé une solution pour cela (voir ma réponse). Merci. –

1

Pour éviter la sélection mettant en lumière d'interférer avec la solution de VonC j'ai ajouté la ligne suivante au constructeur TextHighlight (essentiellement faire le point culminant de sélection invisible):

textPane.setSelectionColor(new Color(1.0f, 1.0f, 1.0f, 0.0f)); 
+0

Bonne prise! +1 J'ai mis à jour ma réponse, et mon propre post sur DZone Snippets, pour inclure votre ligne de code. – VonC

+0

Cependant, il présente l'inconvénient de rendre très difficiles les opérations nécessitant une sélection de texte (couper, copier, etc.)! –