JTable et JComboBox

Tintin -  
 Tintin -
Bonjour,
je developpe une application pour un super marche et je voudrais que losrqu'on commence a ecrire dans la jcombobox tous les produits commençant par les lettres deja tappees apparaissent.merci de bien vouloir m'aider

2 réponses

KX Messages postés 19031 Statut Modérateur 3 020
 
Voici ce que j'ai réussi à faire avec un KeyListener en héritant de JComboBox.
Si tu appuies sur une touche la liste est modifiée en ajoutant le caractère à un préfixe qui détermine les items à afficher. Sauf pour le backspace qui enlève le dernier caractère. Il y a surement d'autres cas particulier à traiter (touche entrée par exemple), mais je te laisse regarder ce que j'ai fait, voir si ça correspond à ce que tu as besoin.

import java.awt.Choice;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.PopupMenu;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;
import java.util.List;
import java.util.LinkedList;

import javax.swing.JComboBox;
import javax.swing.JFrame;

class MaBox extends JComboBox
{
	private static final long serialVersionUID = 1L;

	// Liste de tous les éléments
	private final List<String> liste;
	
	// String rempli au fur et à mesure des KeyListener
	private String prefixe;
	
	// this
	private final MaBox reflect;
	
	MaBox(final String data[])
	{		
		reflect=this;				
		prefixe = "";
		
		// On remplit la liste de tous les éléments (items par défaut)
		liste = new LinkedList<String>();
		for (String str : data)
		{
			liste.add(str);
			insertItemAt(str, getItemCount());
		}
						
		// Quand on appuie sur une touche on modifie le préfixe
		// Les items sont sélectionnés pour correspondre au préfixe
		addKeyListener(new KeyListener() 
		{
			@Override
			public void keyPressed(KeyEvent evt) 
			{
				reflect.removeAllItems();
			
				if (evt.getKeyCode()==KeyEvent.VK_BACK_SPACE)
				{
					// On enlève le dernier caractère
					if (!prefixe.isEmpty())
						prefixe=prefixe.substring(0,prefixe.length()-1);
				}
				else // On ajoute un caractère à la fin
					prefixe+=evt.getKeyChar();		
				
				// On ajoute aux que les éléments qui correspondent au préfixe
				for (String str : data)
					if (str.startsWith(prefixe))
						insertItemAt(str,getItemCount());
			}

			@Override
			public void keyReleased(KeyEvent evt) {}

			@Override
			public void keyTyped(KeyEvent evt) {}
		});
	}
}

public class Test extends JFrame
{
	private static final long serialVersionUID = 1;
	
	public Test()
	{
		setLayout(new FlowLayout());		
		String[] tab ={"aaaa","aaab","aaba","aabb","abaa","abab","abba","abbb","baaa","baab","baba","babb","bbaa","bbab","bbba","bbbb",};
		add(new MaBox(tab));

		setMinimumSize(new Dimension(200,200));
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	
		setVisible(true);
	}
	
	public static void main(String...args)
	{
		new Test();
	}
}
1
Tintin
 
merci je vais essayer de continuer le travail car l'utilisateur ne voit pas ce qu'il saisit.en tout cas tu m'as beaucoup aider?merci
0
KX Messages postés 19031 Statut Modérateur 3 020
 
En effet, on ne voit pas ce qui s'affiche, mais avec juste un JComboBox ça parait compliqué !
À part éventuellement jouer sur l'infobulle au fur et à mesure avec setToolTipText(String)
Sinon il faut faire intervenir un composant auxiliaire avec une zone de texte...
0
Tintin
 
ok je vais essayer
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Tu peux faire ce que tu veux en ajoutant un TextListener avec la méthode addTextListener, malheureusement seul un TextComponent peux l'utiliser, il te faut donc soit un TextArea, soit un TextField.
0
Tintin
 
en fait ce que je veux reellement c'est faire une jCombobox comme celle qui s'affiche quand on fait touche windows+R.quand on tape par exemple une lettre,toutes lescommandes tapees commançant par cette lettre s'affiche.
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Je vais réfléchir à ce qui pourrait se faire ou non, c'est peut-être possible en héritant de JComboBox, et en modifiant la zone de saisie par un TextComponent, ou alors recréer un ComboBox spécifique à ce que tu veux, mais en tout cas ce n'est pas possible de le faire directement avec un JComboBox...
0