Я хочу добавить прослушиватель изменений для каждого элемента управления в панели. Я хочу, чтобы он был надежным, поэтому всякий раз, когда я меняю файл fxml, мне не нужно будет изменять код, который прослушивает изменения в элементах управления.Javafx прослушать изменения управления в панели
Я вычислил способ добавления слушателя для определенного типа элемента управления.
panel.getChildren()
.stream()
.filter(node -> node instanceof TextField).forEach(node ->
((TextField) node).textProperty()
.addListener((observable, oldValue, newValue) -> {
//execute some code
}));
Однако я должен был бы к добавить подобный код для каждого типа управления я намереваюсь использовать в панели для этой работы.
panel.getChildren()
.stream()
.filter(node -> node instanceof TextField).forEach(node ->
((TextField) node).textProperty()
.addListener((observable, oldValue, newValue) -> {
//execute some code
}));
panel.getChildren()
.stream()
.filter(node -> node instanceof TextArea).forEach(node ->
((TextArea) node).textProperty()
.addListener((observable, oldValue, newValue) -> {
//execute some code
}));
//and so on...
panel.getChildren()
.stream()
.filter(node -> node instanceof ComboBox).forEach(node ->
((ComboBox<?>) node).valueProperty()
.addListener((observable, oldValue, newValue) -> {
//execute some code
}));
Что я хочу сделать.
У меня есть редактор документов, у которого есть панель с элементами управления, поэтому всякий раз, когда пользователь меняет одно из этих значений предустановленного элемента управления, панель с кнопками сохранения и отмены будет включена. Кроме того, если пользователь попытался выйти из программы, не отменив или сохранив документ, появится предупреждение о том, хочет ли он отказаться от изменений и выйти или отменить.
Однако я намерен внести изменения в структуру документа, поэтому мне нужно будет постоянно добавлять и удалять элементы управления с панели. Поэтому мне нужен лучший способ добавить этот тип слушателя для каждого элемента управления в панели за один раз.
Там нет никакого способа сделать это (хотя я не совсем ясно, что это вы на самом деле хотите делать). Нет единого единого свойства для всех элементов управления, которые вы могли бы прослушать. Например, 'TextField' имеют 'textProperty',' CheckBox 'имеют' selectedProperty', 'ComboBox' имеют 'valueProperty', а также' editor', который (как правило) имеет 'textProperty'; 'ListView' и 'TableView' имеют 'selectionModel', которые имеют свойство 'selectedItem' и т. Д. И т. Д. –