目前我编写了一个基于数据库的聊天系统。 每个用户的好友列表在登录后都会在TreeView中获得loadet。
表示:
登录后,我通过以下Funktion请求useres朋友的名字,
String namesSt[] = get.getUserFriendNameByUserID(currentUserID);
使用给定的名称将它们作为TreeItem加载到我的Friendlist / 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);
}
当我现在添加我的rootItem时,我在TreeView中看到了Names。 但是如果我点击一个名字,就不会调用给定的MouseEventHandler。
此外,我只想请求触发MouseEvent的Element文本,以便我可以将这些名称提交给spekial funktion。
我如何实现这样的MouseEvent? 如何从动态创建的TreeItem中调用它?
感谢您的帮助:)
cheerse 托比
答案 0 :(得分:3)
TreeItem
代表数据,而不是UI组件。所以他们不会生成鼠标事件。您需要在TreeCell
上注册鼠标侦听器。为此,请在TreeView
上设置单元工厂。单元工厂是一个在需要时创建TreeCell
的函数。因此,这也适用于动态添加的树项。
你需要这样的东西:
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 ;
}