Dynamic 如何为动态加载的TreeView项目提供EventHandler?
目前,我正在编写一个基于数据库的聊天系统。 每个用户的friendlist在登录后在树视图中获取loadet 指: 登录后,我通过以下功能请求用户朋友的姓名,Dynamic 如何为动态加载的TreeView项目提供EventHandler?,dynamic,javafx,treeview,mouseevent,Dynamic,Javafx,Treeview,Mouseevent,目前,我正在编写一个基于数据库的聊天系统。 每个用户的friendlist在登录后在树视图中获取loadet 指: 登录后,我通过以下功能请求用户朋友的姓名, String namest[]=get.getUserFriendNameByUserID(currentUserID) 使用给定的名称将它们作为TreeItem加载到my Friendlist/TreeRootItem“rootItem”中 for(int counter=0;counter{ TreeCell单元=新的TreeCell
String namest[]=get.getUserFriendNameByUserID(currentUserID)代码>
使用给定的名称将它们作为TreeItem加载到my Friendlist/TreeRootItem“rootItem”中
for(int counter=0;counter
现在添加rootItem时,我会在树视图中看到名称。
但是如果我点击一个名字,给定的MouseEventHandler不会被调用
此外,我只想请求触发MouseEvent的元素的文本,这样我就可以将这些名称提交给一个特殊的函数
我怎么能真的遇到这样的老鼠事件?
如何从动态创建的树元素调用它
谢谢您的帮助:)
切尔斯
TobiTreeItem
s表示数据,而不是UI组件。所以它们不会生成鼠标事件。您需要在TreeCell
上注册鼠标侦听器。为此,请在TreeView
上设置单元格工厂。单元工厂是根据需要创建TreeCell
s的函数。因此,这也适用于动态添加的树项
您将需要以下内容:
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 ;
}
TreeView-TreeView;
// ...
treeView.setCellFactory(电视->{
TreeCell单元=新的TreeCell();
cell.textProperty().bind(cell.itemProperty());
cell.addEventHandler(MouseEvent.MOUSE_单击,事件->{
如果(!cell.isEmpty()){
字符串值=cell.getItem();
TreeItem TreeItem=cell.getTreeItem();//如果需要
//过程。。。
}
});
返回单元;
}
TreeItem
s表示数据,而不是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 ;
}
TreeView-TreeView;
// ...
treeView.setCellFactory(电视->{
TreeCell单元=新的TreeCell();
cell.textProperty().bind(cell.itemProperty());
cell.addEventHandler(MouseEvent.MOUSE_单击,事件->{
如果(!cell.isEmpty()){
字符串值=cell.getItem();
TreeItem TreeItem=cell.getTreeItem();//如果需要
//过程。。。
}
});
返回单元;
}
TreeItem
s表示数据,而不是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 ;
}
TreeView-TreeView;
// ...
treeView.setCellFactory(电视->{
TreeCell单元=新的TreeCell();
cell.textProperty().bind(cell.itemProperty());
cell.addEventHandler(MouseEvent.MOUSE_单击,事件->{
如果(!cell.isEmpty()){
字符串值=cell.getItem();
TreeItem TreeItem=cell.getTreeItem();//如果需要
//过程。。。
}
});
返回单元;
}
TreeItem
s表示数据,而不是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 ;
}
TreeView-TreeView;
// ...
treeView.setCellFactory(电视->{
TreeCell单元=新的TreeCell();
cell.textProperty().bind(cell.itemProperty());
cell.addEventHandler(MouseEvent.MOUSE_单击,事件->{
如果(!cell.isEmpty()){
字符串值=cell.getItem();
TreeItem TreeItem=cell.getTreeItem();//如果需要
//过程。。。
}
});
返回单元;
}
很抱歉,我完全不理解这个示例。如果TreeCell不是字符串而是CustomObject,这个示例如何工作?尤其是cell.textProperty().bind(cell.itemProperty())
我不明白:刚创建的TreeCell对象应该从哪里获得itemProperty?如果它不是字符串
,那么您要么使用不同的绑定,要么使用itemProperty
上的侦听器更新文本属性,要么使用覆盖UpdateItemItem(…)的TreeCell
实现
。阅读以获得单元格工作原理的完整解释。我尝试了这种方式:结果是,显示0,1,2,3,之后所有内容都为空。我只是不了解概念…对不起,但我根本不理解此示例。如果TreeCell不是字符串而是CustomObject,则此示例如何工作?尤其是cell.textProperty().bind(cell.itemProperty())
我不明白:刚创建的TreeCell对象应该从哪里获得itemProperty?如果它不是字符串
,那么您要么使用不同的绑定,要么使用itemProperty
上的侦听器更新文本属性,要么使用覆盖UpdateItemItem(…)的TreeCell
实现
。阅读文章,了解有关细胞工作原理的完整解释。我试过这样做:R