Я хотел использовать стандартный 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;
}
Здесь нет причин использовать класс-оболочку 'Boolean'. Вы можете использовать примитивный 'boolean', это более эффективно. То же самое для 'Double' – Dici
Спасибо. Изменив импорт, исправлена ошибка компилятора. – gbear