#javafx #treeview #overriding
Вопрос:
Моя цель состоит в том, чтобы выполнить процесс во время всех добавлений к дочерним элементам в дереве (точнее, просмотр таблицы).
Это node.getTreeItem().getChildren.add(playlist)
вызывается в разных частях моего кода, и я старался как можно больше придерживаться лучших практик… так что давайте все упростим и скажем, что я обязательно позвоню, пока будет сделано перетаскивание, а также при построении дерева.
Мой «плейлист» может быть 3 разных типов (в классе перечисления) :
- ПАПКА (содержащая другой плейлист)
- СПИСОК (содержащий треки, добавленные пользователем)
- ЗАПРОС (содержащий треки в результате запроса)
- ОШИБКА (никогда не должна быть установлена, но полезна для отладки и т. Д.)
Я хочу реализовать метод на своем «расширенном» TreeItemlt;Playlistgt;
, например getPlaylistType()
. Этот метод вернет тип списка воспроизведения.
ВОПРОС : Мой инстинкт подсказал бы, что я должен переопределить node.getTreeItem().getChildren.add(playlist)
, чтобы установить тип таким образом :
- Есть детский плейлист —gt; ПАПКА
- Нет детского плейлиста amp;amp; запрос не существует —gt; ЗАПРОС
- Нет детского плейлиста amp;amp; запрос не существует —gt; СПИСОК
- Любое другое состояние —gt; НЕИЗВЕСТНОЕ/ОШИБКА
- Является ли этот подход правильным ?
- Как переопределить метод » добавить (…)»?
Комментарии:
1. На данный момент я использую метод в своем
TreeItemPlaylist
классе:public boolean addToChildren(TreeItemPlaylist playlist) {...}
который содержитgetChildren.add(playlist)
и любую дополнительную обработку, в которой я нуждаюсь. Вероятно, не самый элегантный… Например, это не предотвращает обход моего настроенного процесса после добавления узла приnode.getTreeItem().getChildren.add(playlist)
использовании.2. Мой инстинкт сказал бы, что я должен переопределить node.getTreeItem().getChildren.add(плейлист) при всем уважении: не слушайте инстинкт, это неправильно 😉 Кстати: не добавляйте детали к вопросу в комментариях, вместо этого отредактируйте вопрос, чтобы включить их.
Ответ №1:
Почему вы предоставляете node.getTreeItem().getChildren.add(playlist)
доступ к различным частям своего программного обеспечения? Если вы просто обернете его в свой собственный класс, вы сможете раскрыть его и делать все, что захотите, при вызове соответствующего add
метода.
Комментарии:
1. Здравствуйте, и спасибо вам за ваш ответ ! У меня действительно есть свой собственный расширенный
TreeItemPlaylist extends TreeItemlt;TreeTableRowPlaylistgt;
класс… Я не переопределилgetChildren()
(anObservableListlt;TreeItemlt;TreeTableRowPlaylistgt;gt;
), и, следовательно, также неadd(...)
(java.util.List.add(TreeItemlt;TreeTableRowPlaylistgt; e)
). Должен ли я ? Если да, то как ?2. вы можете создать метод add(…) в своем «расширенном» классе, выполнить проверку и вызвать getChildren().добавьте(…) оттуда и замените вызовы getChildren().добавьте(…) вызовами метода add(…) в своем расширенном классе, хотя getChildren() по умолчанию по-прежнему будет доступен для разных частей вашего программного обеспечения, как сказал @mipa, вы можете обернуть атрибут TreeItemlt;Список воспроизведенияgt; в свой класс вместо его переопределения и предоставлять только те методы, которые необходимо предоставить.
3. То, что я имел в виду, заключалось в том, чтобы завершить все это и только разоблачить это. Это было бы чище и скрывало бы детали вашей реализации.
4. Итак, если я правильно читаю ваше решение, @mipa, это то, что я предложил в качестве временного решения в своем комментарии к вопросу. Да? Все еще чувствует себя неловко из-за того, что
getChildren.add(playlist)