Il file fxml è come segue (intestazioni omesse):
Posso impostare la radice di TreeView
senza alcun problema. L’albero è aggiornato senza problemi.
Il problema che ho è che non riesco a far scattare un evento su un dato object nella vista. Ho provato e aggiunto un evento onMouseClicked
con un semplice System.out.println () e posso vedere l’evento che viene onMouseClicked
a onMouseClicked
dall’elemento che faccio clic sulla struttura. Ma non riesco a ottenere l’object che è stato cliccato nella vista.
Come lo faccio?
Registrare un listener di mouse con ogni cella dell’albero, utilizzando una cella di produzione. Non conosco il tipo di dati che hai nel tuo TreeView
, ma se fosse String
potrebbe sembrare qualcosa del genere:
// Controller class: public class MainWindowUi { @FXML private TreeView traceTree ; // ... public void initialize() { traceTree.setCellFactory(tree -> { TreeCell cell = new TreeCell () { @Override public void updateItem(String item, boolean empty) { super.updateItem(item, empty) ; if (empty) { setText(null); } else { setText(item); } } }; cell.setOnMouseClicked(event -> { if (! cell.isEmpty()) { TreeItem treeItem = cell.getTreeItem(); // do whatever you need with the treeItem... } }); return cell ; }); } // ... }