JTable et JComboBox
Tintin
-
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
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
-
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(); } } -
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.
-
-
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...
-