IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

[JTextPane] Affichage et réaction à un lien HTML


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Inscrit en
    Juin 2003
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 158
    Par défaut [JTextPane] Affichage et réaction à un lien HTML
    Bonjour,

    Je souhaite insérer un lien html (url ou email) dans un JDialog.
    J'utilise pour cela un JTextPane avec le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    {
    ...
    _mailTo = createJTextPane();
    HTMLDocument doc = (HTMLDocument) _mailTo.getStyledDocument();
    doc.insertAfterStart(doc.getDefaultRootElement(), "<a href=\"mailto:toto@toto.com\">Toto</a>");
    ...
    }
     
    private JTextPane createJTextPane()
    {
            JTextPane jtp = new JTextPane(new HTMLDocument());
            jtp.setEditorKit(new HTMLEditorKit());
            jtp.setEditable(false);
            return jtp;
    }
    Le problème avec ce code est que le lien est centré dans la zone d'affichage au lieu d'être aligné à gauche. Est-ce lié au DefaultStyledDocument ou à autre chose ? En tout cas, je n'ai pas trouvé la solution :

    Ensuite, mon deuxième problème est que je voudrais par exemple mettre deux adresses mail l'une derrière l'autre. J'ai donc naïvement mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    doc.insertAfterStart(doc.getDefaultRootElement(), "<a href=\"mailto:toto@toto.com\">Toto</a>;<a href=\"mailto:titi@toto.com\">Titi</a>");
    mais évidemment, cela n'a pas marché: seule la première adresse est affichée. Je pourrais bien mettre deux JTextPane l'un derrière l'autre mais je ne trouve pas super propre. Quelle est la solution :

    Merci d'avance pour votre aide

  2. #2
    Membre confirmé

    Inscrit en
    Juin 2003
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 158
    Par défaut
    Donc voici la réponse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    public class uHyperLink extends JTextPane
    {
    	public uHyperLink(int type)
    	{
    		super();
    		initialize();
    		_type = type;		
    	}
     
    	public uHyperLink(String address, String alias, int type)
    	{
    		super();
    		initialize();
    		_type = type;
    		setContent(address, alias);
    	}
     
    	private void initialize()
    	{
    		setContentType("text/html");
    		setEditable(false);
    		setFont(new Font("Verdana", Font.PLAIN, 12));
     
    		addHyperlinkListener(new HyperlinkListener()
            {
            	public void hyperlinkUpdate(HyperlinkEvent he)
            	{
            		if (he.getEventType() == HyperlinkEvent.EventType.ACTIVATED)
            		{
            			clickOnLink(he);
            		}
            	}
            });
    	}
     
    	public void setContent(Vector addresses, Vector aliases)
    	{
    		String text = "<html><body>";
    		for (int i=0; i < addresses.size(); i++)
    		{
    			String address 	= (String)addresses.elementAt(i),
    			alias 	= (String)aliases.elementAt(i);
    			if (_type == 1) // url
    				text = text.concat("<a href=\"http://"+address+"\">"+alias+"</a>");
    			else if (_type == 2) // email
    				text = text.concat("<a href=\"mailto:"+address+"\">"+alias+"</a>");
    			if (i != addresses.size()-1)
    				text = text.concat("; ");
    		}
    		text = text.concat("</body></html>");
    		setText(text);
    	}
     
        private void clickOnLink(HyperlinkEvent he)
        {
            try
            {
                String cmd = null;
                if (_type == 1)
                	cmd = "C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE ";
                else if (_type == 2)
                	cmd = "cmd.exe /c start ";
     
                cmd = cmd + he.getURL();
                Runtime.getRuntime().exec(cmd);
            } 
            catch (Exception e) 
            {
                e.printStackTrace();
            }
        }
    Moralité : rien ne sert de pomper un bout de code qu'on ne comprend pas, il vaut mieux repartir des bases

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lien HTML dans un JTextPane
    Par nicorama dans le forum Applets
    Réponses: 2
    Dernier message: 16/12/2008, 20h27
  2. Réponses: 3
    Dernier message: 03/01/2007, 16h09
  3. Réponses: 2
    Dernier message: 14/03/2005, 19h55
  4. [web] lien HTML à partir de perl
    Par lilou0210 dans le forum Web
    Réponses: 4
    Dernier message: 05/11/2004, 00h16
  5. équivalent lien HTML
    Par Dra_Gun dans le forum Flash
    Réponses: 3
    Dernier message: 15/12/2003, 16h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo