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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
|
public class AutoCompleteCBO4 {//implements EventHandler<KeyEvent>
private ComboBox eComboBox;
//...
private ObservableList items;
//constructeur
public AutoCompleteCBO4(ComboBox comboBox, Boolean parIsLimitedToList) {
eComboBox = comboBox;
eComboBox.setEditable(true);
//comme l'observable list ne change jamais, je la remplis une seule fois ici
items = eComboBox.getItems();
eComboBox.getSelectionModel().select(0);
//eComboBox.getSelectionModel().clearSelection();
eComboBox.getEditor().focusedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue observable, Boolean oldValue, Boolean newValue) {
if (newValue) {
System.err.println("cbo GET Focus, eComboBox.getSelectionModel() vaut " + eComboBox.getSelectionModel().getSelectedItem().toString());
}
else {
System.err.println("cbo LOST Focus");
}
}
});
eComboBox.getEditor().textProperty().addListener(new ChangeListener<String>() {
//reçois le focus que je clique sur button ou flèche
@Override
public void changed(ObservableValue<? extends String> oStr, String strOld, String strNew) {
}
});
eComboBox.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
System.out.println("je capte un événement souris setOnMouseClicked. ceci n'arrive que quand je clique la flèche");
//event.consume();
}
});
eComboBox.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event){
System.err.println("passe dans KeyEvent.KEY_PRESSED");
if (event.getCode()== KeyCode.DOWN){
event.consume();
}
if (event.getCode()== KeyCode.BACK_SPACE){
}
else
{
}
if (event.getCode()== KeyCode.ENTER){
System.out.println("IsEnter est TRUE");
}
else
{
}
//
}
});
}
private int chercheCommencantPar(String parCommencePar)
{
//retourne le premier qui commence par critère et sinon 0
int idFromTextFound= 0;
//isFound=false;
for (int i=0; i<items.size(); i++) {
if (items.get(i).toString().toLowerCase().startsWith(parCommencePar.toLowerCase()) )
{
System.out.println("j'ai trouvé '" + items.get(i).toString() + "'");
//isFound=true;
idFromTextFound=i;
break;
}
}
return idFromTextFound;
}
private void MettreItemDeLaListeDansEditor(final String parCommencePar){
System.err.println("passe dans MettreItemDeLaListeDansEditor et recherche sur '" +parCommencePar+"'");
//ignoreChangeEditor=true;
if (!eComboBox.isShowing())
{
eComboBox.show();
}
eComboBox.getSelectionModel().select(chercheCommencantPar(parCommencePar));
eComboBox.getEditor().setText(eComboBox.getSelectionModel().getSelectedItem().toString());
//ignoreChangeEditor=false;
}
private void AppliqueLaSelectionDeA(final int debSel, final int finSel)
{
Platform.runLater(new Runnable(){
@Override
public void run(){
if (true)//if (isEnter)
{
eComboBox.getEditor().selectRange( 0 ,999);
}
else
{
//et arrive le moment de la sélection
eComboBox.getEditor().positionCaret(debSel);
eComboBox.getEditor().selectRange( debSel ,finSel);
}
}
});
}
} |
Partager