Я поддержал себя в углу, используя CheckBoxTreeItem
, потому что я хочу, чтобы он предоставлял функциональность (возможность проверки всех дочерних элементов, если установлен родительский элемент), но мой родитель имеет Hyperlink
в качестве графические, тогда как мои дети имеют Strings
в качестве графика. Java не нравится, когда у вас есть TreeView
, который содержит два разных типа (CheckBoxTreeItem<Hyperlink>
и CheckBoxTreeItem<String>
). Мои параметры состоят в том, чтобы создать TreeView
, который принимает общий тип, или найти способ отображения Hyperlinks
в виде обычного текста. Я пару раз использовал инструмент с общим типом, но не могу заставить его работать. Я больше склоняюсь к модификации гиперссылок, но я буду благодарен за советы в любом случае.TreeView, содержащий разные типы
0
A
ответ
0
Если вы хотите добавить Node
тип, вы можете использовать graphic
недвижимость TreeItem
.
@Override
public void start(Stage primaryStage) {
CheckBoxTreeItem<String> item = new CheckBoxTreeItem<>(null, new Hyperlink("abc"));
CheckBoxTreeItem<String> item2 = new CheckBoxTreeItem<>("Hello World");
CheckBoxTreeItem<String> item3 = new CheckBoxTreeItem<>("42");
item.getChildren().setAll(item2, item3);
TreeView<String> treeView = new TreeView<>(item);
treeView.setCellFactory(CheckBoxTreeCell.forTreeView());
Scene scene = new Scene(treeView);
primaryStage.setScene(scene);
primaryStage.show();
}
В качестве альтернативы, если значение TreeItem
содержит Node
, вам необходимо изменить метод updateItem
из CheckBoxTreeCell
немного:
CheckBoxTreeItem<Object> item = new CheckBoxTreeItem<>(new Hyperlink("abc"));
CheckBoxTreeItem<Object> item2 = new CheckBoxTreeItem<>("Hello World");
CheckBoxTreeItem<Object> item3 = new CheckBoxTreeItem<>("42");
CheckBoxTreeItem<Object> item4 = new CheckBoxTreeItem<>(new Hyperlink("def"));
item.getChildren().setAll(item2, item3, item4);
TreeView<Object> treeView = new TreeView<>(item);
treeView.setCellFactory(tv -> new CheckBoxTreeCell<Object>() {
private final HBox graphicWrapper = new HBox();
{
graphicWrapper.setAlignment(Pos.BASELINE_LEFT);
}
@Override
public void updateItem(Object item, boolean empty) {
graphicWrapper.getChildren().clear();
super.updateItem(item, empty);
if (!empty && (item instanceof Node)) {
// replace graphic & text
setText(null);
graphicWrapper.getChildren().setAll(getGraphic(), (Node) item);
setGraphic(graphicWrapper);
}
}
});
Смежные вопросы
- 1. Добавить разные типы childs в treeview
- 2. Существующая строка/массив, содержащий разные типы символов в C
- 3. F # op_Equality разные типы
- 4. cypher: как вернуть разные типы отношений?
- 5. ValueInjecter имена разные типы/недвижимость
- 6. C++ - возвращает разные типы переменных
- 7. Что означают разные типы BufferedImage?
- 8. Как разбирать разные типы аргументов?
- 9. Разделите строку на разные типы
- 10. SharedPreferences - Android (разные типы данных)
- 11. Разные типы работников одинаковой очереди
- 12. рельсы модели разные почтовые типы
- 13. У lambdas есть разные типы?
- 14. Java разные функциональные типы возвращаемых
- 15. Оттенки серого, разные типы серых
- 16. Коллекции, содержащие разные типы одновременно
- 17. Javadoc @link разные обратные типы
- 18. Существуют ли разные типы HTML5?
- 19. Как хранить разные типы документов
- 20. Разбирайте разные типы данных Java
- 21. RotateFunction имеет разные типы поведения
- 22. iOS: разные «типы» уведомления appWillResignActive
- 23. То же свойство, разные типы
- 24. Существуют ли разные типы NULL?
- 25. Почему существуют разные типы ТЕКСТОВ?
- 26. Swift - Как скопировать массив, содержащий ссылочные типы
- 27. EBCDIC to ASCII, содержащий типы COMP
- 28. Получить содержащий общие типы с ClassTag
- 29. Как создать класс, содержащий разные типы классов, и вызвать членов этих объектов?
- 30. Словарь, содержащий словари с значениями ObservableCollection, которые имеют разные типы сущностей
Ходили с методом номер один. Работал как шарм. Для чтения обязательно включите строку setCellFactory. В противном случае вы получите TreeView только строк, без CheckBoxes. – mpowell48