用javafx写一个单机版的小项目。有一个功能用到了treeView组件。
该模块的功能是:将从数据库查询得到的内容赋值给treeView作为他的子节点,显示出来。每添加一个节点,都需要存贮一个name
域和id
域,但是treeItem.setValue(name)
只能存储一个值作为文本内容,那怎么操作可以额外放置一个id
域。
度娘也没有可用的解决方案。那就只有换一种方式去处理了。既然是树形结构,那用treetableview也可以实现。treeTableview里可以放一个表格。
下面是我的实现方法部分代码。
......
for ( Orders order:projects ){
TreeDatas treeData = new TreeDatas(order.getName(),order.getId());
root.getChildren().add(new TreeItem<>(treeData));
}
TreeTableColumn<TreeDatas,String> nameColumn = new TreeTableColumn<>("项目列表导航");
TreeTableColumn<TreeDatas,String> idColumn = new TreeTableColumn<>();
nameColumn.setCellValueFactory((TreeTableColumn.CellDataFeatures<TreeDatas,String> param)->new ReadOnlyStringWrapper(param.getValue().getValue().getName()));
idColumn.setCellValueFactory((TreeTableColumn.CellDataFeatures<TreeDatas,String> param)->new ReadOnlyStringWrapper(param.getValue().getValue().getId()));
nameColumn.setPrefWidth(300);//
//以下四行将id列隐藏。
idColumn.setPrefWidth(0);
idColumn.setMaxWidth(0);
idColumn.setMinWidth(0);
idColumn.setVisible(false);
/////
tree = new TreeTableView(root);
tree.getColumns().setAll(nameColumn,idColumn);
.说明:Orders,TreeDatas都是我定义的类。projects是Orders类型的数据库的结果集
import javafx.beans.property.SimpleStringProperty;
public class TreeDatas {
private SimpleStringProperty name;
private SimpleStringProperty id;
public TreeDatas(String name, String id) {
this.name = new SimpleStringProperty(name);
this.id = new SimpleStringProperty(id);
}
public String getName() {
return name.get();
}
public String getId() {
return id.get();
}
}
.....
结果截图: