2014-10-10 4 views
0

В настоящее время я использую функцию автозаполнения TextField из ControlsFX, чтобы отображать предложения, когда пользователь печатает. Количество предложений велико, поэтому список не помещается на странице.Java/JavaFX8: выполнить действие, когда вход в TextField имеет определенную длину

Я хотел бы установить длину списка строк максимум, но это еще невозможно в ControlsFX (поскольку, как я могу это сделать). Поэтому я думал об обходном пути, в котором список появляется только тогда, когда пользователь набрал строку из 3 символов или более.

Я теперь установить это действие для выполнения, когда TextField нажата (где searchCustomer мой TextField):

@FXML 
private void searchCustomer() { 
    //Get all customers from shop 
    String[][] customersOfShop = octocash.Main.databaseConnection.getData("some query", 
        Arrays.asList("some columname")); 

    //Convert 2D array to 1D array 
    int noOfRows = customersOfShop.length; 
    String[] customersForList = new String[noOfRows]; 
    for(int k=0; k<noOfRows; k++) { 
     customersForList[k] = customersOfShop[k][0]; 
    } 
    //Set values to AutoComplete TextField 
    TextFields.bindAutoCompletion(searchCustomer, customersForList); 
} 

Как это сделать в Java/javaFX8?

ответ

1

Одним из подходов может быть наблюдать длину текста:

IntegerBinding ib = Bindings.length(textField.textProperty()); 

ib.addListener((ObservableValue<? extends Number> observable, Number oldValue, Number newValue) -> { 
    if(newValue.intValue() >= 3) { 
     // trigger auto complete 
    } 
}); 
+0

Благодаря Улук Бий, работает отлично! – bashoogzaad