2016-09-23 86 views
2

我有TreeTableViewJavaFX 8)工作。有些树节点必须禁用才能进行选择。我曾尝试选择事件,但它不起作用。请查找以下代码以获取更多信息。如何防止TreeItem选择?

treeTableView.getSelectionModel().selectedItemProperty().addListener(
       (observable, oldValue, newValue) -> 
    { 
     // utility node 
     if(newValue.getValue() instanceof UtilityRoot) 
     { 
      return; 
     } 
    } 
); 

我如何防止任何鼠标和键盘选择一些TreeItems

回答

1

什么你试图达到无法工作,因为它只是增加了一个监听通知任何时候选择的项目变更如要防止在调用侦听器之前恰好选择这已经太晚了,你的情况。

默认情况下,你可以并指定,如果你想使用treeTableView.getSelectionModel().setSelectionMode(selectionMode)SINGLEMULTUPLE选择模式,如果你想允许小区选择使用treeeTableView.getSelectionModel().setCellSelectionEnabled(enabled)

  • SelectionMode.SINGLE和单元格选择enabled:允许选择表格中的单个单元格。
  • SelectionMode.SINGLE和小区选择disabled:允许在表中的单个行的选择。
  • SelectionMode. MULTUPLE和小区选择enabled:允许在多个行的几个细胞的选择。
  • SelectionMode. MULTUPLE和小区选择disabled:启用表中的几行的选择。

如果不是对你不够好,你将需要实现自己的TreeTableViewSelectionModel并使用setSelectionModel(TreeTableView.TreeTableViewSelectionModel<S> value)设置。

+0

尼古拉斯,非常感谢您的帮助。有没有机会找到代码示例?我不清楚如何覆盖所有'TreeTableViewSelectionModel'方法。网络上没有找到任何示例。 – panditos

+0

好问题,我从来没有这样做过,而且看起来并不容易,例如你应该看一下JDK的源代码,例如http://grepcode.com/file/repo1 .maven.org/maven2的/ net.java.openjfx.backport /的OpenJFX-78-反向移植/ 1.8.0-EA-b96.1/JavaFX的/场景/控制/ TreeTableView.java#TreeTableView.TreeTableViewArrayListSelectionModel你可以考虑要求新对那个问题 –

+0

尼古拉斯,谢谢。我会朝这个方向挖掘 – panditos