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 :

problème de recherche dans JTable


Sujet :

Java

  1. #1
    Membre régulier Avatar de abdennour bouaicha
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2009
    Messages : 98
    Points : 112
    Points
    112
    Par défaut problème de recherche dans JTable
    salut tout le monde,

    pour faire une recherche dans JTable on fait ce code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    RowFilter<TableModel, Integer> tm = RowFilter.regexFilter( "(?i)" + text, 0 );
    rowSorter.setRowFilter(tm);
    et ça fonctionne bien, si on tape par exemple dans la zone de texte :ol , ça va nous extraire : soleil, olive ,tournesol,...
    mon problème :je voudrais par exemple:si je tape : ol* ça m'affiche seulement olive ...et tous les mots qui ont ol comme préfixe, si je tape *ol ça m'affiche seulement les mots qui ont ol comme suffixe , si je tape *ol* ça m'affiche seulement les mots qui ont ol au milieu.
    est ce qui c'est possible??
    et merci.

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    1. Sans rien faire, non, ça n'existe pas. En revanche, RowFilter a une méthode, celle que tu utilises, pour construire un filtre par une expression régulière, donc qui utilise la syntaxe des expressions régulières.
      Exemple ici.
    2. Tu peux bien entendu implémenter toi-même ce genre de filtre, comme ce que fait RowFilter.regexFilter().
      1. soit en te basant par exemple sur FileNameUtils.wildcardMatch() de Apache Commons. Ça en fait plus que ce que tu voudrais, mais ça fait au moins ce que tu voudrais (c'est fait pour gérer les filtres sur nom de fichier, comme dans un shell). Il faudra étendre RowFilter pour ça.
      2. En cherchant à convertir ce qui est tapé en expression régulière, et en l'utilisant avec RowFilter.regexFilter(). Ce qui se fait de manière assez simple, de manière générale, par exemple par :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        	String regexfilter = Arrays.stream(filter.split("\\*",-1))
        			.map(s-> s.isEmpty()?s:Pattern.quote(s))
        			.collect(Collectors.joining(".*?"));
      3. Ou en testant si ton filtre commence ou termine par une astérisque et en utilisant startsWith et/ou endsWith selon, en étendant RowFIlter, par exemple:
        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
        public class WildcardRowFilter<M,I> extends RowFilter<M,I> {
         
        	private final boolean endsWith;
        	private final boolean startsWith;
        	private final String filter;
        	private final int[] columns;
        	private final boolean casesensitive; 
         
        	public WildcardRowFilter(String filter, boolean casesensitive, int...columns) {
        		this.casesensitive=casesensitive;
        		if ( filter.startsWith("*") ) {
        			endsWith=true;
        			filter = filter.substring(1);
        		}
        		else {
        			endsWith=false;			
        		}
        		if ( filter.endsWith("*") ) {
        			startsWith=true;
        			filter = filter.substring(0,filter.length()-1);
        		}
        		else {
        			startsWith=false;			
        		}
        		if ( !casesensitive ) {
        			filter = filter.toLowerCase();
        		}
        		this.filter=filter;
        		this.columns=checkIndices(columns);
        	}
         
        	@Override
            public boolean include(Entry<? extends M, ? extends I> value){
                int count = value.getValueCount();
                if (columns.length > 0) {
                    for (int i = columns.length - 1; i >= 0; i--) {
                        int index = columns[i];
                        if (index < count) {
                            if (include(value, index)) {
                                return true;
                            }
                        }
                    }
                } else {
                    while (--count >= 0) {
                        if (include(value, count)) {
                            return true;
                        }
                    }
                }
                return false;
            } 
        	private boolean include(Entry<? extends M, ? extends I> value, int count) {
        		String column = value.getStringValue(count);
        		if ( column==null ) {
        			return false;
        		}
         
        		if ( !casesensitive ) {
        			column = column.toLowerCase();
        		}
         
        		if ( startsWith ) {
        			if ( endsWith ) {
        				return column.contains(filter);
        			}
        			else {
        				return column.startsWith(filter);
        			}
        		}
        		else if ( endsWith ) {
        			return column.endsWith(filter);
        		}
        		else {
        			return column.equals(filter);
        		}
        	}
         
        	private static int[] checkIndices(int[] columns) {
                for (int i = columns.length - 1; i >= 0; i--) {
                    if (columns[i] < 0) {
                        throw new IllegalArgumentException("Index must be >= 0");
                    }
                }
                return columns;
            }
        }
      4. etc
    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 régulier Avatar de abdennour bouaicha
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2009
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2009
    Messages : 98
    Points : 112
    Points
    112
    Par défaut
    ça n'as pas fonctionné , mais de toute façon je vous remercie pour ton aide Joel.
    au moins le programme a accepté l’étoile * , et avant il faisait le bug .

  4. #4
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par abdennour bouaicha Voir le message
    ça n'as pas fonctionné .
    C'est-à-dire ? Quelle solution ? Qu'est-ce qui n'a pas fonctionné ?
    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.

Discussions similaires

  1. Problème de Rechercher dans un Adodc lié à une BD Access
    Par zizou2007 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 31/01/2007, 18h07
  2. [Tableaux] Problème PHP - Recherche dans un Array
    Par daniel_gre dans le forum Langage
    Réponses: 1
    Dernier message: 18/07/2006, 09h10
  3. problème de recherche dans une base de donnée mysql
    Par Xini28 dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 24/10/2005, 18h00
  4. problème de recherche dans une base de données
    Par bouzid_mehdi dans le forum Bases de données
    Réponses: 2
    Dernier message: 19/07/2005, 06h47
  5. Problème de recherche dans une BD
    Par ledevelopeur dans le forum Bases de données
    Réponses: 5
    Dernier message: 28/04/2004, 09h49

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