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 :

[checkbox] déselection


Sujet :

Composants Java

  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut [checkbox] déselection
    Bonjour,
    J'ai des checkbox. Quand je les coche, des mots du texte sont surlignés (couleur différente selon la checkbox). Quand je les décoche, les mots doivent réapparaitre comme avant. Mon code fonctionne bien quand je coche. Mais quand je décoche, il fonctionne de temps en temps: pour un meme texte, si je fais plusieurs lancements de l'application, je n'obtiens pas la meme chose:
    - soit tous les mots surlignés redeviennent comme avant et c'est ce que je veux
    - soit quelques mots restent surlignés. Et ce ne sont pas toujours les memes à chaque lancement de l'application.

    voici mon code:
    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
     
    public void itemStateChanged(ItemEvent e) {
    ...
    Object source = e.getItemSelectable();
    ...
     
    if (source == checkbox1) {
    ...
    String matchColored ="<font size=\"4\" style bgcolor=\"blue\" color=\"white\">"+matchFound+"</font>";
    contenu = contenu.replaceAll(matchFound, matchColored);
    zone_texte.setText(contenu);
    }
     
    else if (source == checkbox2) {
    ...
    String matchColored ="<font style bgcolor=\"#00FFFF\">"+matchFound+"</font>";
    contenu = contenu.replaceAll(matchFound, matchColored);
    zone_texte.setText(contenu);
    }
     
     
    if (e.getStateChange() == ItemEvent.DESELECTED){
     
    if (checkbox1 == e.getItem()){
    ...
    String matchColored ="<font size=\"4\" style bgcolor=\"white\" color=\"black\">"+matchFound+"</font>";
    contenu = contenu.replaceAll(matchFound, matchColored);
    zone_texte.setText(contenu);
    }
     
    if (checkbox2 == e.getItem()){
    ...
    String matchColored ="<font style bgcolor=\"white\" color=\"black\">"+matchFound+"</font>";
    contenu = contenu.replaceAll(matchFound, matchColored);
    zone_texte.setText(contenu);
    }
    }
    Merci de votre aide

  2. #2
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut
    bonjour,
    j'ai modifié un peu mon code, mais j'ai toujours le meme probleme. Quand je decoche les cases, certains mots restent surlignés.
    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
     
    public void itemStateChanged(ItemEvent e) {
     
     
    if(e.getStateChange()==ItemEvent.SELECTED) {
     
    if (checkbox1== e.getItem()){...}
    if (checkbox2== e.getItem()){...}
    }
     
    if (e.getStateChange() == ItemEvent.DESELECTED){
     
    if (checkbox1== e.getItem()){...}
    if (checkbox2== e.getItem()){...}
    }
     
     
    }
    Si vous avez une idée...
    Merci

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Par défaut
    Tu es sur que quand tu deselectionne c pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    contenu.replaceAll(matchColored, matchFound);
    qu il faut faire.

  4. #4
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut
    le replaceAll est bon car je remplace le matchfound par le matchcolored. Mais au moins grace à toi, je sais que mon pb ne vient donc pas des checkbox. et je crois qu'il vient encore d'une expression régulière

    J'explique: Si dans mon texte j'ai des mots correspondant à ceux de la base de données, alors je dois les surligner. J'utilise un JTextPane et des balises html (qui n'apparaissent PAS ds le jtextpane). Quand je coche, ça surligne. Quand je décoche, ça désurligne (je sais pas si c très français, mais bon, vous avez compris )

    Quand je check une checkbox, je recherche les mots de ma base, dans mon texte. Si je les trouve, je les encadre par des balises html. OK
    Quand je dechecke, j'utlise une regex qui contient les balises html. Mais ça ne find jamais dans mon texte car les balises html n'apparaissent pas dans le jtextpane.

    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
     
    if(e.getStateChange()==ItemEvent.SELECTED) {
     if (cb1== e.getItem()){
      ResultSet rs = statement.executeQuery("select * from t1");
      while(rs.next()){
       String s = rs.getString("name");
       Pattern regex = Pattern.compile("\\W("+s+")\\W");
       Matcher match = regex.matcher(contenu);
       boolean b = match.find();
       if (b == true) {
         String matchFound = match.group();
         String matchColored ="<font size=\"4\" style bgcolor=\"blue\" color=\"white\">"+matchFound+"</font>";
         contenu = contenu.replaceAll(matchFound, matchColored);
       }
     }		
    zone_texte.setText(contenu);
    }
     
    if (e.getStateChange() == ItemEvent.DESELECTED){
     if (cb1 == e.getItem()){
      ResultSet rs = statement.executeQuery("select * from t1");
       while(rs.next()){
         String s = rs.getString("name");
         Pattern regex = Pattern.compile("<font size=\"4\" style bgcolor=\"blue\" color=\"white\">(.*?)</font>");
         Matcher match = regex.matcher(contenu);
         boolean b = match.find();
         if (b == true) {
         //on ne rentre jamais dans ce if
         String matchFound = match.group();
         String matchColored ="<font style bgcolor=\"white\">"+s+"</font> ";
         contenu = contenu.replaceAll(matchFound, matchColored);
         }		
       }		
    zone_texte.setText(contenu);
     }
    }

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Par défaut
    J'ai une solution pour toi si tu n'as q un seul type de balise <font> (celle pour surligner en bleu). Parce que visiblement l'erreur vient du fait que l'expression régulière n'aime pas les ' \" ' et en utilisant une expression régulière du type

    <font(.*)>(.*)</font>

    et en récupérant matchGroup(2) pour le réafficher sans les balises ca marche. Mais cette méthode suprimera toutes tes balises <font> si tu en a d'autre.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Par défaut
    Voila un exemple de code si tu veux :
    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
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.util.regex.*;
     
    public class Test1 extends JFrame implements ItemListener
    {
    	JEditorPane jep = new JEditorPane();
    	JCheckBox cb1;
     
    	public Test1() {
    		super();
    		cb1 = new JCheckBox("Surligner TOTO");
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setSize(200,200);
    		this.getContentPane().add(jep,BorderLayout.CENTER);
    		this.getContentPane().add(cb1,BorderLayout.SOUTH);
    		cb1.addItemListener(this);
    		jep.setContentType( "text/html" );
    		jep.setText("toto");
    		System.out.println(jep.getText());
    		this.setVisible(true);
    	}
     
     
    	public static void main(String[] args) {
    		Frame f = new Test1();
    	}
     
    	public void itemStateChanged(ItemEvent e) {
     
    		String contenu = jep.getText();
     
    		if(e.getStateChange()==ItemEvent.SELECTED) {
    			if (cb1== e.getItem()){
    				Pattern regex = Pattern.compile("toto");
    				Matcher match = regex.matcher(contenu);
    				boolean b = match.find();
    				if (b == true) {
    					String matchFound = match.group();
    					String matchColored ="<font size=\"4\" style bgcolor=\"blue\" color=\"white\">"+matchFound+"</font>";
    					contenu = contenu.replaceAll(matchFound, matchColored);
    				}
    			}     
    			jep.setText(contenu);
    		}
     
    		if (e.getStateChange() == ItemEvent.DESELECTED){
    			if (cb1 == e.getItem()){
    					Pattern regex = Pattern.compile("<font(.*)>(.*)</font>");
    					Matcher match = regex.matcher(contenu);
    					boolean b = match.find();
    					if (b == true) {
    						//on ne rentre jamais dans ce if
    						String matchFound = match.group();
    						contenu = contenu.replaceAll(matchFound, match.group(2));
    					}      
    				}      
    				jep.setText(contenu);
     
    		}
    	}
    }

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Par défaut
    Finalement les expressions régulières dans java c vraiment pas au point g l'impression. Ou alors c moi qui ne c plus comment ca marche exactement.

    (.*) ne détecte pas les retour à la ligne donc si ta balise commence sur une ligne et qu'elle est fermée sur une autre ligne, il ne la détectera pas.
    Il faut que tu fasse qqchose de plus complexe. Il faut que tu detecte la balise d'entrée et que tu garde tout jusqu'a la balise de sortie.

  8. #8
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut
    slt,
    bon, ben ça y est, je crois que ça marche. . T'as raison barbu0055, quand j'essayais avec les balises complètes , ça ne fonctionnait pas. Donc j'ai fait autrement. La différence entre les balises, c'est leur couleur. Donc avec les regex, je cherche le code couleur dans le texte. et je remplace par white.
    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
     
    //quand on coche
    if (checkbox1 == e.getItem()){ 
    ResultSet rs = statement.executeQuery("select * from t1");
      while(rs.next()){ 
       String s = rs.getString("name");
    	Pattern regex = Pattern.compile("\\W("+s+")\\W");
    	Matcher match = regex.matcher(contenu);
    	boolean b = match.find();
    	if (b == true) {
    		String matchFound = match.group();
    		String matchColored ="<font style bgcolor=\"#FFCCFF\">"+matchFound+"</font>";
    		contenu = contenu.replaceAll(matchFound, matchColored);
    	}		
       }			   	
       zone_texte.setText(contenu);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //qd on décoche
    if (checkbox1 == e.getItem()){
        Pattern regex = Pattern.compile("#FFCCFF");
        Matcher match = regex.matcher(contenu); 
        boolean b = match.find();
        if (b == true) {
            String matchFound = match.group();
            String matchColored ="white";
            contenu = contenu.replaceAll(matchFound, matchColored);
        }		
        zone_texte.setText(contenu);
    }
    ça fonctionne. Quand je recoche la meme case, je me retrouve donc dans mon texte avec <font bgcolor="white"><font style bgcolor="#FFCCFF"> mot_en_couleur </font></font>. Et c'est surligné en couleur. J'étais persuadée que c'étaient les balises extérieures qui comptaient donc qu'ici c'est white qui aurait dominé. Et bah, j'me suis planté! Tant mieux, comme ça , ça marche.

    Merci à toi barbu0055 pour TOUTE ton aide

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

Discussions similaires

  1. script de selection déselection et inversion de checkboxes
    Par piotrowski-s dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/08/2012, 23h17
  2. Selection / déselection multi checkbox
    Par iliak dans le forum ASP.NET MVC
    Réponses: 2
    Dernier message: 09/02/2011, 13h56
  3. Checkbox
    Par rgarnier dans le forum XMLRAD
    Réponses: 11
    Dernier message: 06/03/2003, 10h48
  4. Couleur d'un CheckBox
    Par benj63 dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/07/2002, 14h48
  5. CheckBox en Read Only
    Par MrJéjé dans le forum C++Builder
    Réponses: 7
    Dernier message: 23/06/2002, 15h00

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