Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

JEditorPane, clics, hyperliens

7 views
Skip to first unread message

Yliur

unread,
Dec 17, 2009, 5:16:06 PM12/17/09
to
Bonjour

Je manipule un navigateur html (JEditorPane de l'API Java). Ce
composant est capable de générer un événement particulier
(HyperlinkEvent) quand on clique sur un hyperlien de la page html
qu'il affiche.
Je voudrais détecter les clics sur les hyperliens (donc ça c'est
facile en inscrivant un écouteur sur ces événements
[HyperlinkListener]). Et je voudrais aussi détecter des clics dans le
composant, mais en dehors des hyperliens (quand on clique sur le
fond du composant, là où il n'y a pas de lien). Et là c'est moins
facile, parce qu'il y a bien la possibilité d'inscrire un écouteur
sur les clics de souris (MouseListener), mais ça détecte tous les
clics de souris, y compris ceux sur les liens.

Est-ce clair ?

Une idée pour détecter les clics de souris qui ne sont pas sur des
hyperliens ?

Merci

Albert

unread,
Dec 18, 2009, 3:44:34 AM12/18/09
to
Le 17/12/2009 23:16, Yliur a �crit :

> Bonjour
>
> Je manipule un navigateur html (JEditorPane de l'API Java). Ce
> composant est capable de g�n�rer un �v�nement particulier

> (HyperlinkEvent) quand on clique sur un hyperlien de la page html
> qu'il affiche.
> Je voudrais d�tecter les clics sur les hyperliens (donc �a c'est
> facile en inscrivant un �couteur sur ces �v�nements
> [HyperlinkListener]). Et je voudrais aussi d�tecter des clics dans le

> composant, mais en dehors des hyperliens (quand on clique sur le
> fond du composant, l� o� il n'y a pas de lien). Et l� c'est moins
> facile, parce qu'il y a bien la possibilit� d'inscrire un �couteur
> sur les clics de souris (MouseListener), mais �a d�tecte tous les

> clics de souris, y compris ceux sur les liens.
>
> Est-ce clair ?
>
> Une id�e pour d�tecter les clics de souris qui ne sont pas sur des
> hyperliens ?

Oui, si tu fais:
* Point du click -> position dans le document
* puis tu r�cup�re le style (les attributs) � la position
* tu regarde s'il n'y a pas un attribut qui d�finit le lien hypertexte

sinon, tu reparse le document compl�tement et tu regarde si la position
ne tombe pas dans un Element avec un style "lien hypertexte".


> Merci

Yliur

unread,
Dec 20, 2009, 4:07:41 PM12/20/09
to
Le Fri, 18 Dec 2009 09:44:34 +0100
Albert <alb...@voila.fr> a écrit :

> Le 17/12/2009 23:16, Yliur a écrit :
> > Bonjour
> >
> > Je manipule un navigateur html (JEditorPane de l'API Java). Ce

> > composant est capable de générer un événement particulier


> > (HyperlinkEvent) quand on clique sur un hyperlien de la page html
> > qu'il affiche.

> > Je voudrais détecter les clics sur les hyperliens (donc ça c'est
> > facile en inscrivant un écouteur sur ces événements
> > [HyperlinkListener]). Et je voudrais aussi détecter des clics


> > dans le composant, mais en dehors des hyperliens (quand on clique

> > sur le fond du composant, là où il n'y a pas de lien). Et là c'est
> > moins facile, parce qu'il y a bien la possibilité d'inscrire un
> > écouteur sur les clics de souris (MouseListener), mais ça détecte


> > tous les clics de souris, y compris ceux sur les liens.
> >
> > Est-ce clair ?
> >

> > Une idée pour détecter les clics de souris qui ne sont pas sur des


> > hyperliens ?
>
> Oui, si tu fais:
> * Point du click -> position dans le document

JTextComponent.viewToModel semble faire ça.


> * puis tu récupère le style (les attributs) à la position

Comment faire ça ? getText ne renvoie que le texte et je ne trouve pas
de méthode renvoyant des informations sur le formatage du texte...

> * tu regarde s'il n'y a pas un attribut qui définit le lien hypertexte
>
> sinon, tu reparse le document complètement et tu regarde si la


> position ne tombe pas dans un Element avec un style "lien hypertexte".

Si je pouvais éviter ça, ce serait bien :) .


>
> > Merci
>


Albert

unread,
Dec 28, 2009, 3:52:04 AM12/28/09
to
Le 20/12/2009 22:07, Yliur a �crit :

>> * puis tu r�cup�re le style (les attributs) � la position
>

> Comment faire �a ? getText ne renvoie que le texte et je ne trouve pas
> de m�thode renvoyant des informations sur le formatage du texte...

* getDocument() te retourne un HTMLDocument
* sur ce document, getCharacterElement(int) ou getParagraphElement(int
pos) retourne un Element sur lequel tu appelle getAttributes()
* ou sur le document, getLogicalStyle(int) ?

Yliur

unread,
Jan 18, 2010, 10:40:48 AM1/18/10
to
Le Mon, 28 Dec 2009 09:52:04 +0100
Albert <alb...@voila.fr> a écrit :

> Le 20/12/2009 22:07, Yliur a écrit :
>
> >> * puis tu récupère le style (les attributs) à la position
> >

> > Comment faire ça ? getText ne renvoie que le texte et je ne trouve
> > pas de méthode renvoyant des informations sur le formatage du


> > texte...
>
> * getDocument() te retourne un HTMLDocument
> * sur ce document, getCharacterElement(int) ou
> getParagraphElement(int pos) retourne un Element sur lequel tu
> appelle getAttributes()
> * ou sur le document, getLogicalStyle(int) ?

getCharacterElement renvoie un ensemble d'attributs dans lequel il y a
un attribut nommé "a" quand le caractère fait partie d'un lien. Je
devrais m'en sortir avec ça.

Par contre getLogicalStyle(int) m'a renvoyé null.

Le code permettant d'afficher les attributs :

// Détection du clic sur un paragraphe
public void mouseClicked (MouseEvent evt)
{
JEditorPane navig = (JEditorPane) evt.getSource() ;
HTMLDocument document = (HTMLDocument) navig.getDocument() ;
Point posClic = new Point (evt.getX(), evt.getY()) ;
int posDoc = navig.viewToModel (posClic) ;
Element eltCaractere = document.getCharacterElement (posDoc) ;
AttributeSet attrs = eltCaractere.getAttributes() ;
Enumeration nomsAttrs = attrs.getAttributeNames() ;
while (nomsAttrs.hasMoreElements())
{
Object nomAttr = nomsAttrs.nextElement() ;
System.out.println (nomAttr + " : " + attrs.getAttribute (nomAttr)) ;
}
}

Merci pour ton aide :)

0 new messages