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

AWT/Swing Java Discussion :

Création d'un lien hypertexte qui ouvre une fenêtre


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut Création d'un lien hypertexte qui ouvre une fenêtre
    Bonjour,
    j'ai crée une JFrame qui contient deux JTextArea et chaque zone contient un ensemble des éléments extraites a partir d'un fichier XML. pour chaque élément je veux créer un lien en cliquant sur un élément alors une petite fenêtre s'ouvre (comme les messages d'erreur, ou de warnings ). cette fenêtre contient un texte.
    je pense qu'avec lien le couleur de l'élément devient automatiquement en bleu.
    NB: les éléments sont extraites a partir d'un fichier XML. et qui sont rangés dans des ArrayList().
    Merci d'avance pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    JTextArea ne permet aucune mise en forme. Si tu veux créer des liens style liens web, il faut utilise un JTextPane avec un contenu de type text/html.

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Bonjour,
    je change le JTextArea avec JTextPane. et je trouve un code pret qui permet de changer les couleurs d'un JTextPane. mais ça marche pas avec moi.

    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
    private void colorWords(String[] strsToHighlight,String text,final StyledDocument doc, Color color, boolean bold){
     
    	    for(String strToHL : strsToHighlight){
    	            Pattern p = Pattern.compile(strToHL);
    	            Matcher m = p.matcher(text);
     
    	            while(m.find() == true){                                                
    	                    MutableAttributeSet attri = new SimpleAttributeSet();
    	                    StyleConstants.setForeground(attri, color);
    	                    StyleConstants.setBold(attri, bold);
     
    	                    final int start = m.start();
    	                    final int end = m.end();
    	                    final int length = end-start;
    	                    final MutableAttributeSet style = attri;
     
    	                    SwingUtilities.invokeLater(new Runnable(){
    	                        public void run(){
    	                                doc.setCharacterAttributes(start, length, style, true);
    	                        }
    	                    });
    	            }
    	    }
    	}
     
     
    	/**
             * Fonction qui recupere le texte d'un TextePane et lance le coloriage des mot a partir de ses tableau de mot 
             * @param c 
             */
    	public void sQLHighlight(JTextPane grandeZone1) {
     
    	    String[] strsToHighlightBleu = {"etudainet","professeur ",};
    	    String text = grandeZone1.getText().replaceAll("\n", " ");
    	    final StyledDocument doc = grandeZone1.getStyledDocument();
    	    final MutableAttributeSet normal= new SimpleAttributeSet();
    	    StyleConstants.setForeground(normal, Color.black);
    	    StyleConstants.setBold(normal, false);
     
    	    SwingUtilities.invokeLater(new Runnable() {
     
    	    public void run() {
    	            doc.setCharacterAttributes(0, doc.getLength(), normal, true);
    	        }
    	    });
    	   // colorWords(strsToHighlightFunction, text, doc, new Color(88,54,48), false);
    	    colorWords(strsToHighlightBleu, text, doc,  Color.blue, false);
    	    //colorWords(strsToHighlightBlack, text, doc, Color.BLACK, true);
    	   // colorWords(strsToHighlightLayer, text, doc, new Color(107,94,255)Color.blue, false);    
    	   // colorWords(strsToHighlightState, text, doc,new Color(59,176,23) , false); 
    	}
    }
    grandeZone1 c'est un JTextPane définit dans une méthode au dessus de cette méthode. les couleurs ne changent pas. alors c'est quoi l'erreur?
    Merci d'avance

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    1) ce n'est pas selon moi la méthode la plus simple ed faire, comme je l'ai dit, génère du html, c'est plus facile de créer des liens, selon moi, avec du html.

    2) est-ce que tu appelle bien ta méthode après avoir mis le contenu dans le JTextPane?

    3) c'est normal la faute d'orthographe sur etudiant et l'espace derrière professeur?

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    1) ce n'est pas selon moi la méthode la plus simple ed faire, comme je l'ai dit, génère du html, c'est plus facile de créer des liens, selon moi, avec du html.

    2) est-ce que tu appelle bien ta méthode après avoir mis le contenu dans le JTextPane?

    3) c'est normal la faute d'orthographe sur etudiant et l'espace derrière professeur?
    Bonjour
    j'ai juste passé en paramètre le TextPane qui est définit dans une méthode window() dans la méthode de coloriage.
    j'ai pas fus l'appel de window(), car je trouve que le code est tous des fonctions prédéfinies il y'a seulement l'appel de JTextPane(). pour être honnête j'ai pas compris comment et ou je fais l'appel de la méthode window(). voici le code complet:
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    public static void window( List<String> etudiant, List<String> profeseur){
    JFrame window=new JFrame("fenetre"); 
    JTextPane grandeZone = new JTexPane();
    		JTextPane grandeZone1 = new JTextPane();
    JPanel surfTotPanel = new JPanel();
    		JPanel surfTotPanel2 = new JPanel();
    JPanel container = new JPanel();
    surfTotPanel.add(grandeZone);
    		surfTotPanel2.add(grandeZone1);
    container.setLayout(new BorderLayout());
    		container.add(surfTotPanel2, BorderLayout.EAST);
    		container.add(surfTotPanel,BorderLayout.WEST);
    window.setContentPane(container);
    		window.setVisible(true);
    		window.setSize(800,500);
    StringBuilder texte = new StringBuilder(" etudiant  "); 
    		 texte.append( "\n" );
    		StringBuilder texte1 = new StringBuilder(" professeur  "); 
    		 texte1.append( "\n" );
    		for( String et :  etudiant ) {
    		    texte.append( "\n" ); // pour passer à la ligne suivante
    		    texte.append( et ); // le texte de la ligne
    		}
     
    		// et à la fin :
    		grandeZone.setText(texte.toString());
    		grandeZone.getColorModel();
    		for( String prof :  professeur ) {
    		    texte1.append( "\n" );
    		    texte1.append( prof); // le texte de la ligne
    		}
    		// et à la fin :
    		grandeZone1.setText(texte1.toString()); 
    		fonte = new Font("Andalus", Font.HANGING_BASELINE, tailleInitiale);
    		grandeZone.setFont(fonte);
    		grandeZone1.setFont(fonte);
    	}
    private void colorWords(String[] strsToHighlight,String text,final StyledDocument doc, Color color, boolean bold){
     
    	    for(String strToHL : strsToHighlight){
    	            Pattern p = Pattern.compile(strToHL);
    	            Matcher m = p.matcher(text);
     
    	            while(m.find() == true){                                                
    	                    MutableAttributeSet attri = new SimpleAttributeSet();
    	                    StyleConstants.setForeground(attri, color);
    	                    StyleConstants.setBold(attri, bold);
     
    	                    final int start = m.start();
    	                    final int end = m.end();
    	                    final int length = end-start;
    	                    final MutableAttributeSet style = attri;
     
    	                    SwingUtilities.invokeLater(new Runnable(){
    	                        public void run(){
    	                                doc.setCharacterAttributes(start, length, style, true);
    	                        }
    	                    });
    	            }
    	    }
    	}
     
     
    	/**
             * Fonction qui recupere le texte d'un TextePane et lance le coloriage des mot a partir de ses tableau de mot 
             * @param c 
             */
    	public void sQLHighlight(JTextPane grandeZone1) {
     
    	    String[] strsToHighlightBleu = {"etudiant","professeur "};
    	    String text = grandeZone1.getText().replaceAll("\n");
    	    final StyledDocument doc = grandeZone1.getStyledDocument();
    	    final MutableAttributeSet normal= new SimpleAttributeSet();
    	    StyleConstants.setForeground(normal, Color.black);
    	    StyleConstants.setBold(normal, false);
     
    	    SwingUtilities.invokeLater(new Runnable() {
     
    	    public void run() {
    	            doc.setCharacterAttributes(0, doc.getLength(), normal, true);
    	        }
    	    });
    	   // colorWords(strsToHighlightFunction, text, doc, new Color(88,54,48), false);
    	    colorWords(strsToHighlightBleu, text, doc,  Color.blue, false);
    	    //colorWords(strsToHighlightBlack, text, doc, Color.BLACK, true);
    	   // colorWords(strsToHighlightLayer, text, doc, new Color(107,94,255)Color.blue, false);    
    	   // colorWords(strsToHighlightState, text, doc,new Color(59,176,23) , false); 
    	}
    }
    je corrige les fautes d'orthographe. alors c'est quoi le problème?
    Merci beaucoup

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Ben tu as fais une belle méthode, sQLHighlight, pour mettre en couleur les mots professeur et etudiant, mais à aucun moment tu n'appelle cette méthode, donc ce n'est pas prêt de mettre quoi que ce soit en couleur.

Discussions similaires

  1. un bouton qui ouvre une fenêtre en Java
    Par dzsouma dans le forum Composants
    Réponses: 1
    Dernier message: 28/05/2015, 19h55
  2. Réponses: 0
    Dernier message: 27/06/2014, 13h12
  3. Bouton "Imprimer" qui ouvre une fenêtre système
    Par caro_caro dans le forum Wicket
    Réponses: 1
    Dernier message: 04/06/2009, 18h06
  4. Console qui ouvre une fenêtre
    Par fab56 dans le forum Langage
    Réponses: 4
    Dernier message: 14/05/2008, 16h23
  5. lien qui ouvre une nouvelle page
    Par anthonycosson dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 22/09/2006, 00h23

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