2009-10-23 7 views
2

Un JTextPane vous permet de embed JComponents and images. Lorsque vous sélectionnez une section du document, le texte est mis en surbrillance, mais les éléments incorporés ne le sont pas. Vous pouvez faire en sorte que les composants incorporés soient notifiés au moyen d'un CaretListener après l'événement, mais je me demandais s'il y avait un moyen de les mettre en surbrillance pendant les sélections de la souris?Sélection d'éléments incorporés dans un JTextPane

+0

Je l'ai fait un peu plus creuser, et je soupçonne fortement la voie à suivre est d'installer un surligneur personnalisé sur le JTextPane. Je vais essayer cela demain, et ajouter une réponse si je peux le faire fonctionner. –

Répondre

0

Installer une coutume Highlighter dans le JTextPane, qui peut informer les composants embarqués quand ils ont besoin d'être mis en évidence ou non:

textPane.setHighlighter(new CustomHighlighter()); 

// ... 

private final class CustomHighlighter extends DefaultHighlighter { 

    @Override 
    public Object addHighlight(int p0, int p1, HighlightPainter p) throws BadLocationException { 
     Object tag = super.addHighlight(p0, p1, p); 
     /* notify embedded components ... */ 
     return tag; 
    } 

    @Override 
    public void removeHighlight(Object tag) { 
     super.removeHighlight(tag); 
     /* notify embedded components ... */ 
    } 

    @Override 
    public void removeAllHighlights() { 
     super.removeAllHighlights(); 
     /* notify embedded components ... */ 
    } 

    @Override 
    public void changeHighlight(Object tag, int p0, int p1) throws BadLocationException { 
     super.changeHighlight(tag, p0, p1); 
     /* notify embedded components ... */ 
    } 
} 
0

Vous pourriez utiliser un MouseMotionListener et gérer l'événement mouseDragged. Vous devrez alors utiliser la méthode viewToModel() pour savoir quelle partie du modèle a été sélectionnée.

-1

Eh bien, j'ai fait quelque chose de similaire, il y a longtemps. Dans mes cas, les composants incorporés étaient des smileys dans un éditeur de chat. Ce que vous faites est que quand une sélection se produit, vous obtenez la marque et le point (e.getMark, e.getDot). Si le smiley se trouve entre la marque et le point, alors il est censé être mis en surbrillance, donc vous définissez un champ dans le composant smiley indiquant d'être surligné, et mettez une demande de repeint. Enfin, dans la méthode de peinture (g) du composant smiley, vous le peignez comme surligné.

+0

"Vous pouvez faire notifier les composants incorporés au moyen d'un CaretListener après l'événement, mais je me demandais s'il y avait un moyen de les mettre en surbrillance pendant les sélections de la souris" –

Questions connexes