2014-11-05 127 views
1

我一直在尝试使用JavaFX CheckBoxTreeTableCell提供的单元工厂,但我无法弄清楚如何使它工作。如何使用JavaFX CheckBoxTreeTableCell?

的Javadoc似乎并不匹配的实现。例如:

公共静态< S,T >回调< TreeTableColumn < S,T >,TreeTableCell < S,T > > forTreeTableColumn(回拨< 整数,ObservableValue <布尔> > getSelectedProperty)

...

参数:

getSelectedProperty - 即,给定类型的对象TreeTableColumn < S,T >,将返回一个ObservableValue <布尔>表示给定项目是否被选中或未被回调。

什么是整数代表什么?有没有人有任何示例代码如何打算使用?

感谢, 罗布

回答

0

有四种方法CheckBoxTreeTableCell.forTreeTableColumn。他们都期待回调,即ObservableValue<Boolean>类型的TreeTableColumn,或Boolean类型的TreeTableColumn

在最后一种情况下,由于您已经提供了该列,因此在为给定索引调用updateItem方法来呈现复选框时,会在该位置找到其选定状态。

虽然在与回调的方法中,发现对于给定的索引所选择的状态下,call该索引制成。

这是这两种情况下很简单的用例。你可以看到回调如何使用索引进入收集和检索状态:

private final ObservableList<Person> data = FXCollections.observableArrayList(
     new Person("Staff",false), 
     new Person("John",false), 
     new Person("Greg",true)); 

@Override 
public void start(Stage primaryStage) { 

    TreeItem<Person> rootTree = new TreeItem<>(data(0)); 
    rootTree.setExpanded(true); 
    data.stream().skip(1).forEach(person->rootTree.getChildren().add(new TreeItem<>(person))); 
    TreeTableView<Person> table=new TreeTableView<>(rootTree); 

    TreeTableColumn<Person,String> columnName=new TreeTableColumn<>("Name"); 
    columnName.setCellValueFactory(cellData -> cellData.getValue().getValue().nameProperty()); 
    columnName.setPrefWidth(100); 

    TreeTableColumn<Person,Boolean> columnWeight=new TreeTableColumn<>("Overweight"); 
    // case TreeTableColumn (uncomment to run) 
    // columnWeight.setCellFactory(CheckBoxTreeTableCell.forTreeTableColumn(columnWeight)); 

    // case Callback: 
    columnWeight.setCellFactory(
      CheckBoxTreeTableCell.forTreeTableColumn(
        (Integer param) -> data.get(param).overWeightProperty())); 

    columnWeight.setCellValueFactory(cellData -> cellData.getValue().getValue().overWeightProperty()); 
    columnWeight.setPrefWidth(150); 
    table.getColumns().addAll(columnName, columnWeight); 
    table.setEditable(true); 

    Scene scene = new Scene(table, 400, 300); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

其中:

private class Person { 

    public Person(String name, boolean overWeight) { 
     this.name.set(name); 
     this.overWeight.set(overWeight); 
    } 

    private final StringProperty name = new SimpleStringProperty(); 

    public String getName() { 
     return name.get(); 
    } 

    public void setName(String value) { 
     name.set(value); 
    } 

    public StringProperty nameProperty() { 
     return name; 
    } 
    private final BooleanProperty overWeight = new SimpleBooleanProperty(); 

    public boolean isOverWeight() { 
     return overWeight.get(); 
    } 

    public void setOverWeight(boolean value) { 
     overWeight.set(value); 
    } 

    public BooleanProperty overWeightProperty() { 
     return overWeight; 
    } 
} 
1

我想你想使用forTreeTableColumn(TreeTableColumn列)。

final TreeTableView<Integer> integerTreeTableView = new TreeTableView<>(); 
    final TreeTableColumn<Integer, Boolean> column = new TreeTableColumn<>(); 
    column.setCellFactory(CheckBoxTreeTableCell.forTreeTableColumn(column)); 
    column.setCellValueFactory(param -> { 
       if(param.getValue().getValue() > 5) { 
        return new SimpleBooleanProperty(true); 
       } else { 
        return new SimpleBooleanProperty(false); 
       } 
      }); 
    integerTreeTableView.getColumns().add(column);