2015-10-01 2 views
0

Я хотел использовать стандартный TextInputDialog, чтобы позволить пользователю ввести Price (значение в долларах), которое затем будет применено ко всем выбранным строкам TableView (после преобразования).TextInputDialog назначить обработчик KeyEvent редактору

В соответствии с API метод getEditor()TextInputDialog возвращает TextField, используемый в Dialog. Когда я попытался назначить KeyEvent обработчик редактора (TextField) я получил ошибку компилятора на tField.setOnKeyPressed в NetBeans:

"incomaptible types < anonymous EventHandler<java.awt.event.KeyEvent>> cannot be converted to EventHandler<?, super javafx.Scene.Input.KeyEvent>> 
type argument T is a type-variable: 
T extends Event declared in interface EventHandler. 

Базовый код:

TextInputDialog dialog = new TextInputDialog(); 
    dialog.setTitle("Set PRICE per kg."); 
    dialog.setContentText("Price per kg:"); 

    // Configure the EDITOR. 
    TextField tField = dialog.getEditor();   
    tField.setOnKeyPressed(new EventHandler<KeyEvent>() 
    { 
     @Override 
     public void handle(KeyEvent ke) 
     { 
      String character = ke.getCharacter(); 
      String text = ke.getText(); 

      if (!LM_Utility.isNumberKeyValid(text, character, 99.99)) 
       ke.consume();     
     } 
    }); 

где функция полезности я эффективно использовать в других местах:

public static Boolean isNumberKeyValid(String text, String character, Double maxValue) 
{ 
    Boolean valid = Boolean.FALSE; 
    String fullText = text + character; 
    Double fullNumber = Double.valueOf(fullText); 

    if ((character.matches("\\d") || character.equals(".")) && (fullNumber <= maxValue)) 
      valid = Boolean.TRUE; 

    return valid; 

} 
+0

Здесь нет причин использовать класс-оболочку 'Boolean'. Вы можете использовать примитивный 'boolean', это более эффективно. То же самое для 'Double' – Dici

+0

Спасибо. Изменив импорт, исправлена ​​ошибка компилятора. – gbear

ответ

1

Посмотрите на ошибки компиляции, вы используете тип качания KeyEvent вместо одного JavaFX. Просто исправьте свой импорт.

+0

Спасибо. Изменив импорт, исправлена ​​ошибка компилятора. Однако у меня возникла неожиданная проблема с методомпотребление(). Если maxValue равно 99.99, и я вхожу в 1, а затем 2, он принимает оба этих символа как «действительный». Когда я затем вхожу в 3, он определяет, что он недействителен, и выполняется ke.consume(), а 3 появляется в текстовое поле. Я хочу отклонить значения «вне диапазона» от 0 до maxValue (99.99). – gbear

Смежные вопросы