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 № 1TreeItem
s 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 TreeCell
s, 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 ;
}