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 :

[débutant] mettre un filtre sur un JcomboBox


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 149
    Par défaut [débutant] mettre un filtre sur un JcomboBox
    bonjour,

    il y a peut être plus simple (et dans ce cas je suis preneur), mais je suis en train d'utiliser un filtre sur les listes pour filtrer une combobox (ca part mal ?)

    voici donc mon filtre
    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
     
    package filters;
     
    import java.util.Vector;
     
    import database.DataAccess;
     
    public class ProcessusListModel {
    	 Vector processus;
    	    DataAccess dbConnection;
     
    	    public ProcessusListModel(DataAccess _dbConnection){
    	    	dbConnection = _dbConnection;
    	    	processus = dbConnection.getProcess();
    	    }
     
    	    public int getSize()
    	    {
    	    	// return size of static data
    	    	return processus.size();
    	    }
     
    	    public Object getElementAt(int index)
    	    {
    	    	// return static data element
    	    	return processus.get(index);
    	    }
     
    	    public Vector getProcessus()
    	    {
    	    	return processus;
    	    }
     
    	    public void update(){
    	    	processus = dbConnection.getProcess();
    	    }
    }
    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    package filters;
     
    import java.util.ArrayList;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
     
    import javax.swing.AbstractListModel;
    import javax.swing.ListModel;
    import javax.swing.event.ListDataListener;
     
     
    public class FilterProcessus  extends AbstractListModelFilter {
    	//listes des indices "autorisés"
    	protected ArrayList indexList = new ArrayList();
        // Current State
        protected String filter;
     
    	public FilterProcessus(ListModel model) {
    		super(delegate);
    	}
     
     
    	 public synchronized void setProcessus(String filterString)
    	 {
    		 filter = filterString;
    		 indexList.clear();
    		 Pattern pattern;
    		 Matcher matcher;
     
    		 pattern = Pattern.compile(filter);
     
    		 for(int i =0; i < delegate.getSize();i++)
    		 {
    		 	matcher = pattern.matcher((CharSequence) delegate.getElementAt(i));
    		 	if(matcher.find()) {
    		 		indexList.add(new Integer(i));
    		 	}
    		 }
    		 this.fireContentsChanged(this, 0, indexList.size());
    	 }
     
    	 public int getSize()
    	 {
    	    	// Return size of index collection.  If no filter
    	    	// has been set, or the filter refers to a salesman
    	    	// that does not exist, zero may be returned
    	        return indexList.size();
     
    	  }
    	public Object getElementAt(int index)
        {
        	// return the filtered data element
        	int newIndex = ((Integer) indexList.get(index)).intValue();
        	System.out.println(newIndex);
        	return delegate.getElementAt(newIndex);
        }
    }
     
    abstract class AbstractListModelFilter extends AbstractListModel
    {
    //	 Storage of reference to model being filtered
    	protected static ListModel delegate;
     
    	// Constructor - takes a single parameter containing
    	// a reference to the model being filtered
    	public AbstractListModelFilter(ListModel delegate)
    	{
    		this.delegate = delegate;
    	}
     
    	public ListModel getDelegate()
    	{
    		return this.delegate;
    	}
     
    	public int getSize()
    	{
    		// delegate to filter target
    		return delegate.getSize();
    	}
     
    	public Object getElementAt(int index)
    	{
    		// delegate to filter target
    		System.out.println("list");
    		return delegate.getElementAt(index);
    	}
     
    	public void addListDataListener(ListDataListener listener)
    	{
    		// delegate to filter target
    		delegate.addListDataListener(listener);
    	}
     
    	public void removeListDataListener(ListDataListener listener)
    	{
    		// delegate to filter target
    		delegate.removeListDataListener(listener);
    	}
    }
    et j'aurais deux questions à ce propos :
    1) est ce la bonne méthode pour filtrer mon combo ?
    2) comment je l'utilise ? (le set model attend bien sur un comboboxmodel, et pas un listmodel)

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 149
    Par défaut
    bon, j'ai laissé tomber les filtres, même après avoir obtenu des trucs marrants (modifier directement le comboModel, enfin, je passe)

    j'ai finalement obtenu la solution suivante qui satisfait mes besoins :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    jcTarget = new JComboBox(DataIn);
    jbFiltre.addActionListener(new ActionFilter(Data,jtSource,jcFiltre));
    et celui de l'actionlistener :
    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
     
    class ActionFilter implements ActionListener{
    	JTextField jtSource;
    	JComboBox jcTarget;
    	Vector dataIn;
    	Vector dataOut = new Vector();
     
    	public ActionFilter(Vector _data, JTextField _jtSource, JComboBox _jcTarget){
    		jtSource=_jtSource;
    		jcTarget=_jcTarget;
    		dataIn = _data;
    	}
     
    	public void actionPerformed(ActionEvent arg0) {
    		Pattern pattern;
    		Matcher matcher;
     
    		while(dataIn.size()!=0)
    		{
    			Object o = dataIn.get(0);
    			dataOut.add(o);
    			dataIn.remove(0);
    		}
     
    		for(int i=0;i<dataOut.size();i++)
    		{
    			pattern = Pattern.compile(jtSource.getText());
    			System.out.print("data :"+dataOut.get(i).toString());
    			System.out.println(" pattern :"+jtSource.getText());
    			matcher = pattern.matcher((CharSequence) dataOut.get(i).toString());
    		 	if(matcher.find()) {
    		 		dataIn.add(dataOut.get(i));
    		 		dataOut.remove(i);
    				i--;
    		 	}
    		}
    		jcTarget.setSelectedIndex(0);
    	}
     
    }
    si vous avez des remarques constructives n'hésitez pas (la dernière en date était sur les conventions du nom des fonctions, que j'essaie maintenant de respecter)

    @+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 71
    Par défaut
    ma question risque d'etre con, mais
    qu'est ce que jbFiltre ?
    je supose que DataIn est un vecteur ou une liste

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

Discussions similaires

  1. Comment mettre un ActionListener sur une Jcombobox
    Par maitrejediyass dans le forum Composants
    Réponses: 1
    Dernier message: 02/01/2011, 13h37
  2. mettre un filtre sur une colonne + listebox
    Par nabelou1 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 10/03/2009, 12h57
  3. comment mettre un filtre sur une variable créée ?
    Par poezart dans le forum Deski
    Réponses: 1
    Dernier message: 04/11/2008, 13h11
  4. [Débutant]Mettre une action sur un bouton
    Par Bindy dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 29/06/2007, 12h28
  5. Réponses: 1
    Dernier message: 08/09/2006, 10h31

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