Selectione item d'un choice avec le clavier

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 239 fois - Téléchargée 27 fois

Contenu du snippet

Selectione un item dans un menu déroulant à l'aide du clavier.
quand on est sur le Choice, si li y a un Item qui commence par la lettre tapé, on accède à cet Item.
Quand on tape à nouveau sur cette lettre on accède à l'Item qui suit et ce même si
le tableau passé en parametre n'est pas classé par ordre alphabétique.

Source / Exemple :


import java.awt.*;
import java.util.*;
import java.awt.event.*;

public class MenuDeroulant extends Choice implements FocusListener, KeyListener {
	String nomDuMenu;
	String [] tableau;
	Vector vecteurPremiereLettre = new Vector();
	public MenuDeroulant (String _nomDuMenu, String[] _tableau) {
		this.nomDuMenu = _nomDuMenu;
		this.tableau = _tableau;
		this.setName(nomDuMenu);
		this.addFocusListener(this);
		this.addKeyListener(this);
		this.addItem(nomDuMenu);
		for ( int i = 0; i < tableau.length; i++) {
			this.addItem(tableau[i]);
		}
	}
	public void focusGained(FocusEvent fe){
		for (int i = 0; i<this.getItemCount(); i++) {
			vecteurPremiereLettre.addElement(this.getItem(i).substring(0,1));
		}
	}
	public void focusLost(FocusEvent fe){}
	
	public void keyPressed(KeyEvent ke){
		int code = ke.getKeyCode();
		String lettreEnfonce = ke.getKeyText(code);
		int indexItem = this.getSelectedIndex();
		String premiereLettre = this.getSelectedItem().substring(0,1);
		selectione(this, lettreEnfonce, indexItem);
	}
	public void keyReleased(KeyEvent ke){}
	public void keyTyped(KeyEvent ke){}
	
	public void selectione(Choice _choix, String _touche,int _indexDepart){
            	String touche = _touche;
            	int indexDepart = _indexDepart;
            	int conserveIndexDepart;
            	if (indexDepart == 0){
            		if (this.getSelectedItem().substring(0,1).equalsIgnoreCase(touche))
            		indexDepart = indexDepart+1;
            		for (int i = indexDepart;i<this.getItemCount();i++){
            			if (touche.equalsIgnoreCase((String)vecteurPremiereLettre.elementAt(i))){
            				this.select(i);
            				break;
            			}
            		}//fin de la boucle for.
            	}
            	else {
            		conserveIndexDepart = indexDepart;
            		if (this.getSelectedItem().substring(0,1).equalsIgnoreCase(touche))
            		indexDepart = indexDepart+1;
            		if (indexDepart>this.getItemCount()-1)
            		indexDepart = 0;
            		for(int i = indexDepart; i<this.getItemCount(); i++) {
            			if (touche.equalsIgnoreCase((String)vecteurPremiereLettre.elementAt(i))){
            				this.select(i);
            				break;
            			}
            			if (i == this.getItemCount()-1) {
            				for (int ii = 0; ii < conserveIndexDepart; ii++) {
            					if (touche.equalsIgnoreCase((String)vecteurPremiereLettre.elementAt(ii))){
            						this.select(ii);
            						break;
            					}
            				}// Fin de la deuxieme boucle for (int ii = 0; ii < conserveIndexDepart; ii++)
            			}//fin de if (i == this.getItemCount()-1)
            		}//fin de la premiere boucle for(int i = indexDepart; i<this.getItemCount(); i++)
            	}// fin de else...	
	}// fin de la metode selectionne
		
}

Conclusion :


A tout à l'heure.
BIBE

A voir également

Ajouter un commentaire

Commentaire

cs_Duss
Messages postés
890
Date d'inscription
lundi 8 avril 2002
Statut
Membre
Dernière intervention
29 juillet 2004
9 -
salut,
sympa la source ;)
pour ton truc de rappuyer sur la meme touche, si tu stockes dans ta classe, par exemple un String currentTouche qui contiendrait la derniere touche enfoncée ainsi qu un int currentPos qui stockerais le numero du dernier item affiché correspondant a cette lettre,
tu pourrais en testant si la touche enfoncée et la mem que currentTouche faire avancer ton currentPos de un et aller chercher l item correspondant ;)
Duss

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.