Selectione item d'un choice avec le clavier

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

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.