/ / Jak nadać dynamicznie ładowanemu TreeViewItem narzędzie EventHandler? - dynamiczny, javafx, widok drzewa, mouseevent

Jak przekazać dynamicznie załadowany TreeViewItem do EventHandler? - dynamiczny, javafx, widok drzewa, mouseevent

w tej chwili programuję system czatu oparty na bazie danych. Lista znajomych każdego użytkownika zostanie załadowana do TreeView po zalogowaniu.

znaczy: Po zalogowaniu żądam nazw przyjaciół useres za pomocą następującego Funktionu, String namesSt[] = get.getUserFriendNameByUserID(currentUserID);

Aby użyć podanych nazw, aby załadować je jako TreeItem do mojego elementu „rootItem” Friendlist / TreeRootItem

for (int counter = 0; counter < namesSt.length; counter++) {
System.out.println(namesSt[counter]);
TreeItem<String> item = new TreeItem<String> (namesSt[counter]);

item.addEventHandler(MouseEvent.MOUSE_CLICKED,handler);

rootItem.getChildren().add(item);
}

Gdy teraz dodam mój rootItem, widzę nazwy w TreeView. Ale jeśli kliknę nazwę, podany MouseEventHandler nie zostanie wywołany.

Ponadto chcę tylko poprosić o tekst elementu, który uruchamia MouseEvent, dzięki czemu mogę przesłać te nazwy do funkcji spezial.

Jak mogę zrealizować taki MouseEvent? Jak można go wywołać z dynamicznie utworzonego TreeItem?

Dziękuję za pomoc :)

cheerse Tobi

Odpowiedzi:

3 dla odpowiedzi № 1

TreeItems reprezentują dane, a nie komponent interfejsu użytkownika. Więc nie generują zdarzeń myszy. Musisz zarejestrować odbiornik myszy na TreeCell. Aby to zrobić, ustaw fabrykę komórek na TreeView. Fabryka komórek jest funkcją, która tworzy TreeCells, jak są potrzebne. W ten sposób działa również dla dynamicznie dodawanych elementów drzewa.

Będziesz potrzebował czegoś takiego:

TreeView<String> treeView ;

// ...

treeView.setCellFactory( tv -> {
TreeCell<String> cell = new TreeCell<>();
cell.textProperty().bind(cell.itemProperty());
cell.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> {
if (! cell.isEmpty()) {
String value = cell.getItem();
TreeItem<String> treeItem = cell.getTreeItem(); // if needed
// process ...
}
});
return cell ;
}