如何在javafx中将鼠标双击事件侦听器添加到ListView的单元格中?

如何在javafx中将鼠标双击事件侦听器添加到ListView的单元格中?,listview,javafx,mouseevent,Listview,Javafx,Mouseevent,我在列表视图中有一个链接列表。我想在列表的每个单元格中添加一个mouseEventListener,这样每当用户双击列表项链接时就会打开。我可以自己编写打开链接的功能,但我无法为列表中的每个单元格添加双击事件。请帮助…让我们考虑你的代码> ListVIEW < /Cord>作为播放列表。现在,您可以在每个单元格上使用双击功能实现鼠标侦听器 playList.setOnMouseClicked(new EventHandler<MouseEvent>() { @Overrid

我在列表视图中有一个链接列表。我想在列表的每个单元格中添加一个mouseEventListener,这样每当用户双击列表项链接时就会打开。我可以自己编写打开链接的功能,但我无法为列表中的每个单元格添加双击事件。请帮助…

让我们考虑你的代码> ListVIEW < /Cord>作为播放列表。现在,您可以在每个单元格上使用双击功能实现鼠标侦听器

playList.setOnMouseClicked(new EventHandler<MouseEvent>() {

    @Override
    public void handle(MouseEvent click) {

        if (click.getClickCount() == 2) {
           //Use ListView's getSelected Item
           currentItemSelected = playList.getSelectionModel()
                                                    .getSelectedItem();
           //use this to do whatever you want to. Open Link etc.
        }
    }
});
playList.setOnMouseClicked(新建EventHandler()){
@凌驾
公共无效句柄(鼠标事件单击){
如果(单击.getClickCount()==2){
//使用ListView的getSelected项
currentItemSelected=playList.getSelectionModel()
.getSelectedItem();
//用这个做你想做的任何事情。打开链接等。
}
}
});

我必须解决同样的问题,我的ListView包含一个网格窗格和标签文本,因此您必须将“instanceof”和“or”的另一面更改为您所拥有的内容

(假设您的ListView名为ListView):

listView.setOnMouseClicked(新的EventHandler(){
@凌驾
公共无效句柄(MouseeEvent事件){
如果(event.getButton()==MouseButton.PRIMARY&&event.getClickCount()==2&&
(LabeledText | |的event.getTarget()实例((GridPane)event.getTarget()).getChildren().size()>0)){
//你的代码在这里
}    
}
});
如果用户在项目的边缘和ListView的边框附近单击,它可能不会通过if循环,但在您的情况下,听起来用户不会这样做


希望这能有所帮助。

这种方法可行,但在listview的“空”空间中单击两次也会触发。你能不能把它只绑定在物品上?@LucèBrùlè它取决于你把事件附加到哪里。我想它需要一个链接);在底部的最后一个}之后。@nicomp抓得好!;)
listView.setOnMouseClicked(new EventHandler<MouseEvent>() {
    @Override
    public void handle(MouseEvent event) {
        if(event.getButton() == MouseButton.PRIMARY && event.getClickCount() == 2 &&
           (event.getTarget() instanceof LabeledText || ((GridPane) event.getTarget()).getChildren().size() > 0)) {

           //your code here        
         }    
    }
});