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
Répondre
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 ... */
}
}
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.
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é.
"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" –
- 1. image base64 dans JTextPane
- 2. JTextPane Synchroniser l'interface de sélection de style Problème
- 3. Java JTextPane Save
- 4. Rediriger System.out vers JTextPane
- 5. HTML JTextPane newline support
- 6. Comment obtenir le style du texte sélectionné dans un JTextPane?
- 7. Obtenir le style à la position d'insertion dans un JTextPane
- 8. Modification du contenu de HTMLDocument affiché dans un JTextPane
- 9. Autre structure de document dans JTextPane?
- 10. JTextPane keypress emulation
- 11. Comment copier du texte stylé dans JTextPane
- 12. Fichiers d'assemblage incorporés dans Visual Studio
- 13. Filtrage de documents incorporés dans MongoDB
- 14. Renvoyer les documents incorporés dans la requête
- 15. Comment trier les objets incorporés dans MongoDB
- 16. Java JTextPane HTML image cookies
- 17. Quand utiliser les documents incorporés?
- 18. Office iFilter et documents incorporés
- 19. Java JTextPane JScrollPane Affichage Problème
- 20. Comment définir un classpath de scripts Groovy incorporés?
- 21. comment faire JTextPane peinture police anti-aliasé?
- 22. Éditeur JTextPane grand fichier et performance
- 23. Faire des mots de différentes couleurs dans JTextField/JTextPane /?
- 24. Centrage du texte dans un JTextArea ou un JTextPane - Alignement horizontal du texte
- 25. afficher les liens dans le JTextPane de java sans html
- 26. Java Swing - Problème avec le composant d'insertion (JTextArea) dans JTextPane
- 27. Objets incorporés dans des documents MS Office utilisant Python?
- 28. Java Swing - composant d'insertion de problème dans JTextPane
- 29. Mise en surbrillance des extraits de code incorporés dans vim
- 30. Dessin personnalisé de TabControls incorporés (multicouches) Erreur
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. –