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

 Java Discussion :

Rendre du texte cliquable (débutant)


Sujet :

Java

  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 18
    Par défaut Rendre du texte cliquable (débutant)
    Bonjour,

    Grace à vous j'ai pu arriver à un résultat satisfaisant (fenêtre avec du texte (issu d'une base oracle) actualisé toutes les n secondes) mais on m'en demande un peu plus sur un sujet que j'ai du mal à comprendre.

    Ce texte (une chaine de caractère) est mise dans un JLABEL ce qui m'a permis de faire de la mise en forme avec du HTML (très pratique) mais m'interdit tout clic de souris sur un lien. J'ai cherché diverses manières de rendre ce texte sensible mais je sèche :

    - soit mettre ce texte dans des boutons sans bord et attribuer une action sur les boutons.
    - soit rendre ce texte (qui contient du HTML) sensible afin que les liens du type <a href=...></a> soient actifs.
    - soit une autre manière je ne connais pas... encore..

    Quelles serait la meilleure orientation ?

    Merci pour vos conseils

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tu ne pourras pas rendre le lien dans le JLabel cliquable. Le html n'est qu'un artifice pour pouvoir jouer sur les styles, mais un JLabel n'est pas un navigateur. Si le texte entier est un lien, tu peux rendre le JLabel cliquable. Sinon, utilise un JTextPane : tu peux rendre ce composant non éditable.

    Ensuite, le lien ne fonctionnera pas directement comme dans un navigateur, mais tu peux être notifier de quand il est cliqué, par un HyperlinkListener. Et faire ce tu veux à partir du lien cliqué.

    En revanche, contrairement à un JLabel, le texte reste sélectionnable et on peut faire un copier. Si on veut empêcher ça, on peut utiliser un NavigationFilter pour empêcher tout déplacement du curseur. Enfin, le JTextPane n'a pas le même rendu standard qu'un JLabel, au niveau de la couleur de fond. Il faudra donc lui affecter la couleur d'un JLabel si on veut que le rendu soit identique à celui qu'on avait lorsqu'on utilisait le JLabel.

    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
    public class LienHtml {
     
    	public static void main(String[] args) {
     
    		final JFrame frame = new JFrame("Démo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.setResizable(false);
     
    		JTextPane textpane = new JTextPane();
                    // il faut dire qu'on veut faire du rendu html
    		textpane.setContentType("text/html"); 
    		// pour éviter qu'on puisse modifier le texte au clavier
    		textpane.setEditable(false); 
    		// pour éviter qu'on puisse sélectionner du texte 
    		textpane.setNavigationFilter(new NavigationFilter() {
    			@Override
    			public void setDot(FilterBypass fb, int dot, Bias bias) {
    			}
    			@Override
    			public void moveDot(FilterBypass fb, int dot, Bias bias) {
    			}
    		});
    		// pour avoir la couleur de fond d'une JLabel
    		textpane.setBackground(SystemColor.control);
                    // on affecte le texte
    		textpane.setText("<html><body>"+
    		"<p>Pour accèder au site Développez, cliquez sur le lien ci-dessous</p>"+
    		"<a href=\"http://www.developpez.net/forums/f6/java/\">Lien</a>"
    		+ "<p>Ceci était un lien cliquable</p>"		
    		+ "<p>Si vous cliquez sur le lien suivant, ça ferme la fenêtre</p>"
    		+ "<p><a href=\"#close\">Fermer la fenêtre</a></p>"
     
    		);
    		// pour réagir au clic 
    		textpane.addHyperlinkListener(new HyperlinkListener() {
     
    			@Override
    			public void hyperlinkUpdate(HyperlinkEvent e) {
     
    				// si le lien est cliqué 
    				if ( e.getEventType()==EventType.ACTIVATED ) {
                                            // si ce n'est pas une URL valide, on peut récupérer le contenu de href par getDescription()
    					if ( "#close".equals(e.getDescription()) ) { 
    						frame.dispose();
    					}
    					else {
    						//ici on lance le navigateur système par défaut
    						try {
    							Desktop.getDesktop().browse(e.getURL().toURI());
    						} catch (IOException | URISyntaxException e1) { 
    							e1.printStackTrace();
    						}
    					}
    				}
    			}
    		});
     
    		frame.add(textpane);
     
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 18
    Par défaut
    Merci pour toutes ces précisions

    J'avais cherché en parallèle et trouve une piste vers le JEditorPane, qui semblait convenir mais je n'ai pas encore trouvé et compris son fonctionnement (il impose une syntaxe du HTML particulière que je n'ai pas encore assimilée)

    Finalement j'ai suivi vos conseils avisés et grâce à vous, ça fonctionne. Merci encore pour votre aide.

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

Discussions similaires

  1. rendre une page cliquable
    Par gloglo dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 04/01/2007, 10h48
  2. rendre zone text enabled
    Par MSM_007 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/10/2006, 14h39
  3. Rendre un JPanel cliquable
    Par littleshrimp dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 15/05/2006, 14h18
  4. [Débutant]RichEdit => Rendre le texte non sélectionnable
    Par Runlevel dans le forum C++Builder
    Réponses: 4
    Dernier message: 02/12/2004, 23h47
  5. [FLASH MX 2004]Dynamic Text Cliquable
    Par danael dans le forum Flash
    Réponses: 7
    Dernier message: 30/04/2004, 19h55

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