/ / Come fornire ad TreeViewItem un oggetto DynamicHandler caricato in modo dinamico? - dinamico, javafx, treeview, mouseevent

Come dare un oggetto TreeViewItem caricato dinamicamente ad EventHandler? - dinamico, javafx, treeview, mouseevent

al momento programma un sistema di chat basato su database. La lista amici di ogni utente viene caricata in una vista ad albero dopo il login.

si intende: Dopo il login richiedo i nomi degli utenti utenti tramite la seguente Funktion, String namesSt[] = get.getUserFriendNameByUserID(currentUserID);

Per usare i nomi dati per caricarli come TreeItem nella mia lista amici / TreeRootItem "rootItem"

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);
}

Quando aggiungo il mio rootItem, vedo i nomi nel TreeView. Ma se clicco su un nome, il dato MouseEventHandler non viene chiamato.

Inoltre voglio solo richiedere il testo dell'elemento che attiva MouseEvent, in modo da poter inviare questo nome a una funzione speciale.

Come posso realizzare un simile MouseEvent? Come è possibile chiamarlo dal TreeItem creato dinamicamente?

Grazie per tutto l'aiuto :)

cheerse Tobi

risposte:

3 per risposta № 1

TreeItems rappresenta i dati, non il componente dell'interfaccia utente. Quindi non generano eventi del mouse. Devi registrare l'ascoltatore del mouse su TreeCell. Per fare ciò, imposta una cella di produzione sul TreeView. La fabbrica di celle è una funzione che crea TreeCells come sono necessari Quindi questo funzionerà anche per gli elementi ad albero aggiunti dinamicamente.

Avrai bisogno di qualcosa del genere:

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 ;
}