В этом уроке по JavaFX предложено создать приложение - адресную книгу. Человека, занесённого в эту адресную книгу, можно удалить, предварительно выбрав его в списке, однако нужно как-то адаптировать приложение к случаю, когда пользователь нажал кнопку "удалить" предварительно никого не выбрав.
Мы должны сообщать пользователю о том, что он, перед тем как нажимать кнопку Delete, должен выбрать запись в таблице. (Ещё лучше совсем деактивировать кнопку, чтобы у пользователя не было соблазна сделать что-то не так).
Автор урока абсолютно прав насчёт дезактивации кнопки, но почему-то пошёл именно первым путём. Однако умение менять состояние элементов является необходимым при изучении UI-фреймворков.
Конечно, мы можем прицепить к обработчику события выбора адресата personTable.getSelectionModel().selectedItemProperty().addListener()
разблокировщик кнопки, но хотелось бы использовать концепцию привязки свойств и данных, которая имеется не только в веб-приложениях, но и, например, Windows Presentation Foundation и Universal Windows Platform.
<ButtonBar>
<buttons>
<Button text="Add new…" />
<Button text="Edit …" />
<Button
onAction="#handleDeletePerson"
text="Delete"
<!-- Неверный синтаксис -->
disabled="{{selectedIndex < 0}}"
/>
</buttons>
</ButtonBar>
Разумеется, что selectedIndex < 0
разумно вынести в какое-либо отдельное свойство:
@FXML
private disableDeleteButtonFlag = selectedIndex < 0;
Возможно ли это в JavaFX?
Лучше всего, все завязывать на свойствах. Их можно изменять, прослушивать события изменения, связывать
// Свойство кнопки
// BooleanProperty buttonDisableProperеy = button.disableProperty();
BooleanProperty buttonDisableProperеy = new SimpleBooleanProperty(true);
// Наше свойство, где будет хранится условие для отключения кнопки
BooleanProperty myProperty = new SimpleBooleanProperty(false);
System.out.println(String.format("Button disabled:%s, myProp:%s", buttonDisableProperеy.get(), myProperty.get()));
// Связываем два свойства
buttonDisableProperеy.bindBidirectional(myProperty);
/*
//в слушателе событий списка при выборе проверяем выбран ли хоть один элемент
//если не выбран ни один, то значение будет false, деактивироваь кнопку
else myProperty.setValue(selectedElemenеs ==0);
*/
myProperty.setValue(true);
System.out.println("myProperty has been changed");
System.out.println(String.format("Button disabled:%s, myProp:%s", buttonDisableProperеy.get(), myProperty.get()));
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как сделать проверку на процессы Windows если процесс VMexe найден тогда программа закрывается если не найден тогда продолжает выполнение
Есть приложение Javafx, запускается там, разумеется, где есть jreМожно ли как сделать, чтобы jar файл запускался на компьютерах без установленного...
Есть MainActivity и есть menu_list в android studio, надо, что бы в MainActivity по нажатию на кнопку прогружался контент из menu_list в MainActivityПомогите пожалуйста
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском