Question

Un JTextPane vous permet de incorporer JComponents et les images . Lorsque vous sélectionnez une section du document, le texte est mis en surbrillance, mais pas les éléments incorporés. Vous pouvez faire en sorte que les composants intégrés soient notifiés par un CaretListener après l'événement, mais je me demandais s'il était possible de les mettre en surbrillance lors des sélections de souris?

Était-ce utile?

La solution 2

Installez un surligneur personnalisé dans le JTextPane , qui peut informer les composants incorporés lorsqu'ils doivent ou non être surlignés:

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 ... */ 
    }
}

Autres conseils

Vous pouvez utiliser un MouseMotionListener et gérer l’événement mouseDragged. Vous devrez ensuite utiliser la méthode viewToModel () pour savoir quelle partie du modèle est sélectionnée.

J'ai fait quelque chose de similaire, il y a longtemps. Dans mes cas, les composants intégrés étaient des smileys dans un éditeur de discussion. Ce que vous faites, c'est que lorsqu'une sélection est effectuée, vous obtenez le repère et le point (e.getMark, e.getDot). Si le smiley se situe entre la marque et le point, il est supposé être mis en surbrillance. Vous devez donc définir un champ dans le composant smiley pour le mettre en surbrillance, puis faire une demande de repeinte. Enfin, dans la méthode paint (g) du composant smiley, il vous suffit de le peindre comme indiqué.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top