2017-07-07 107 views
0

我的JavaFX应用程序有一个ListView,其中包含需要处理的项目。我有两个按钮,用户可以通过点击来处理列表中的下一个项目(即“前进”按钮),或撤消对列表中最后一个项目的处理(即“后退”按钮)。我不希望他们任意选择列表中的项目(他们应该只能使用这两个按钮来移动)。但是,我希望他们能够右键单击项目以获取一些上下文菜单(例如,从列表中删除右键单击的项目)。确定哪个JavaFX ListView项目未被选中而被点击

我添加了以下事件过滤器,通过单击它来禁用选择项目,同时仍允许用户滚动浏览并查看列表中的所有项目。

instrList.addEventFilter(MouseEvent.MOUSE_PRESSED, event -> { 
     if (event.getButton() == MouseButton.SECONDARY) 
      System.out.println("right clicked... something"); 
     event.consume(); 
    }); 

我被困在什么是确定名单上的项目被点击,所以我可以用它做什么(再次,例如,从列表中删除)。

回答

2

使用电池工厂,这样就可以与ListCell S上注册监听器,而不是与ListView

instrList.setCellFactory(lv -> { 
    ListCell<MyDataType> cell = new ListCell<MyDataType>() { 
     @Override 
     protected void updateItem(MyDataType item, boolean empty) { 
      super.updateItem(item, empty); 
      if (empty) { 
       setText(null); 
      } else { 
       setText(item.toString()); 
      } 
     } 
    }; 
    cell.addEventFilter(MouseEvent.MOUSE_PRESSED, event -> { 
     if (event.getButton()== MouseButton.SECONDARY && (! cell.isEmpty())) { 
      MyDataType item = cell.getItem(); 
      System.out.println("Right clicked "+item); 
     } 
    }); 
    return cell ; 
}); 

(更换MyDataType与正在使用的ListView无论何种类型)

相关问题