1、单列
2、多列
3、多列带复选框
1、
package application.tableTreeView.tableTree;
import javafx.application.Application;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.TreeTableColumn.CellDataFeatures;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeTableView;
import javafx.stage.Stage;
public class SingleColumnData extends Application{
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Basic TreeTable example demo");
Group group = new Group();
final TreeItem<String> childNode1 = new TreeItem<>("ChildNode1");
final TreeItem<String> childNode2 = new TreeItem<>("ChildNode2");
final TreeItem<String> childNode3 = new TreeItem<>("ChildNode3");
final TreeItem<String> rootItem = new TreeItem<String>("rootNode");
rootItem.setExpanded(true);
rootItem.getChildren().addAll(childNode1,childNode2,childNode3);
TreeTableColumn<String, String> column = new TreeTableColumn<>("Column");
column.setPrefWidth(150);
column.setCellValueFactory((CellDataFeatures<String, String> p) -> new ReadOnlyStringWrapper(p.getValue().getValue()));
final TreeTableView<String> treeTableView = new TreeTableView<>(rootItem);
treeTableView.getColumns().add(column);
treeTableView.setPrefWidth(152);
treeTableView.setShowRoot(true);
group.getChildren().add(treeTableView);
Scene scene = new Scene(group);
primaryStage.setScene(scene);
primaryStage.show();
}
}
2、
package application.tableTreeView.tableTree;
import java.util.Arrays;
import java.util.List;
import javafx.application.Application;
import javafx.beans.property.ReadOnlyStringWrapper;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.CheckBoxTreeItem;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeTableCell;
import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.TreeTableView;
import javafx.stage.Stage;
import javafx.util.Callback;
public class MultipleColumnsData extends Application{
List<Employee> employees = Arrays.<Employee>asList(
new Employee("Ethan Williams", "ethan.williams@example.com"),
new Employee("Emma Jones", "emma.jones@example.com"),
new Employee("Michael Brown", "michael.brown@example.com"),
new Employee("Anna Black", "anna.black@example.com"),
new Employee("Rodger York", "roger.york@example.com"),
new Employee("Susan Collins", "susan.collins@example.com"));
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("MultiplateCloumnsData");
Group group = new Group();
final TreeItem<Employee> root = new TreeItem<>(new Employee("Sales Department", ""));
root.setExpanded(true);
//多级此处设置
employees.stream().forEach((employee) -> {
TreeItem<Employee> child = new TreeItem<>(employee);
employees.stream().forEach((employee2) -> {
child.getChildren().add(new TreeItem<>(employee2));
});
root.getChildren().add(child);
});
Scene scene = new Scene(group);
TreeTableColumn<Employee, String> empColumn = new TreeTableColumn<>("Employee");
empColumn.setPrefWidth(150);
empColumn.setCellValueFactory(
(TreeTableColumn.CellDataFeatures<Employee, String> param) ->
new ReadOnlyStringWrapper(param.getValue().getValue().getName())
);
TreeTableColumn<Employee, String> emailColumn = new TreeTableColumn<>("Email");
emailColumn.setPrefWidth(190);
emailColumn.setCellValueFactory(
(TreeTableColumn.CellDataFeatures<Employee, String> param) ->
new ReadOnlyStringWrapper(param.getValue().getValue().getEmail())
);
TreeTableView<Employee> treeTableView = new TreeTableView<>(root);
treeTableView.getColumns().setAll(empColumn, emailColumn);
group.getChildren().add(treeTableView);
primaryStage.setScene(scene);
primaryStage.show();
}
//数据POJO
public class Employee {
private SimpleStringProperty name;
private SimpleStringProperty email;
public SimpleStringProperty nameProperty() {
if (name == null) {
name = new SimpleStringProperty(this, "name");
}
return name;
}
public SimpleStringProperty emailProperty() {
if (email == null) {
email = new SimpleStringProperty(this, "email");
}
return email;
}
private Employee(String name, String email) {
this.name = new SimpleStringProperty(name);
this.email = new SimpleStringProperty(email);
}
public String getName() {
return name.get();
}
public void setName(String fName) {
name.set(fName);
}
public String getEmail() {
return email.get();
}
public void setEmail(String fName) {
email.set(fName);
}
}
}
3、
package application.tableTreeView.tableTree;
import javafx.application.Application;
import javafx.beans.property.*;
import javafx.beans.value.ObservableValue;
import javafx.scene.Scene;
import javafx.scene.control.CheckBoxTreeItem;
import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.TreeTableView;
import javafx.scene.control.cell.CheckBoxTreeTableCell;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.util.Callback;
import java.util.Arrays;
import java.util.List;
public class CheckBoxTreeTableData extends Application {
public static void main(String[] args) {
launch(args);
}
CheckBoxTreeItem<Employee> rootItem = null;
TreeTableView<Employee> tree = null;
/**
* @param primaryStage
* @throws Exception
*/
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Tree View Sample");
List<Employee> employees = Arrays.asList(new Employee("Emma Jones", "emma.jones@example.com"),
new Employee("Michael Brown", "michael.brown@example.com"),
new Employee("Anna Black", "anna.black@example.com"),
new Employee("Rodger York", "roger.york@example.com"),
new Employee("Susan Collins", "susan.collins@example.com"));
TreeTableColumn<Employee, String> empColumn = new TreeTableColumn<>("Employee");
empColumn.setPrefWidth(150);
empColumn.setCellValueFactory(
(TreeTableColumn.CellDataFeatures<Employee, String> param) -> new ReadOnlyStringWrapper(
param.getValue().getValue().getName()));
TreeTableColumn<Employee, String> emailColumn = new TreeTableColumn<>("email");
emailColumn.setPrefWidth(190);
emailColumn.setCellValueFactory(
(TreeTableColumn.CellDataFeatures<Employee, String> param) -> new ReadOnlyStringWrapper(
param.getValue().getValue().getEmail()));
tree =new TreeTableView<>();
tree.setEditable(true);
rootItem = new CheckBoxTreeItem<>(new Employee("Ethan Williams", ""));
rootItem.setExpanded(true);
for (Employee employee : employees) {
final CheckBoxTreeItem<Employee> checkBoxTreeItem = new CheckBoxTreeItem<>(employee);
rootItem.getChildren().add(checkBoxTreeItem);
checkBoxTreeItem.getChildren().add(new CheckBoxTreeItem<>(employee));
}
tree.setRoot(rootItem);
tree.setShowRoot(false);
TreeTableColumn<Employee, Boolean> empColumn2 = new TreeTableColumn<>();
CheckBoxTreeTableCell checkCell = new CheckBoxTreeTableCell();
empColumn2.setPrefWidth(100);
empColumn2.setCellValueFactory(
(TreeTableColumn.CellDataFeatures<Employee, Boolean> param) -> new ReadOnlyBooleanWrapper(
param.getValue().getValue().getSelectBoolean()));
empColumn2.setCellFactory(checkCell.forTreeTableColumn(getSelectedProperty));
rootItem.setIndependent(false);
checkCell.setSelectedStateCallback(new Callback<Integer, ObservableValue<Boolean>>() {
@Override
public ObservableValue<Boolean> call(Integer param) {
System.out.println("选中事件-->" + param);
return null;
}
});
tree.getColumns().setAll(empColumn2, empColumn, emailColumn);
StackPane root = new StackPane();
root.getChildren().add(tree);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}
Callback<Integer, ObservableValue<Boolean>> getSelectedProperty = new Callback<Integer, ObservableValue<Boolean>>() {
@Override
public ObservableValue<Boolean> call(Integer param) {
return ((CheckBoxTreeItem<?>) tree.getTreeItem(param)).selectedProperty();
}
};
class Employee {
private BooleanProperty selectBoolean;
private SimpleStringProperty name;
private SimpleStringProperty email;
public SimpleStringProperty nameProperty() {
if (name == null) {
name = new SimpleStringProperty(this, "name");
}
return name;
}
public SimpleStringProperty emailProperty() {
if (email == null) {
email = new SimpleStringProperty(this, "email");
}
return email;
}
public BooleanProperty selectBooleanProperty() {
if (selectBoolean == null) {
selectBoolean = new SimpleBooleanProperty(this, "selectBoolean");
}
return selectBoolean;
}
public Employee(String name, String email) {
this.name = new SimpleStringProperty(name);
this.email = new SimpleStringProperty(email);
this.selectBoolean = new SimpleBooleanProperty(true);
}
public String getName() {
return name.get();
}
public void setName(String fName) {
name.set(fName);
}
public String getEmail() {
return email.get();
}
public void setEmail(String fName) {
email.set(fName);
}
public Boolean getSelectBoolean() {
return selectBoolean.get();
}
public void setSelectBoolean(Boolean select) {
this.selectBoolean.set(select);
}
}
}
自定义CELL UI内容
package application.com.treeTableView;
import javafx.application.Application;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ListCell;
import javafx.scene.control.TableCell;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeTableCell;
import javafx.scene.control.TreeTableColumn;
import javafx.scene.control.TreeTableView;
import javafx.scene.control.TreeView;
import javafx.scene.control.TreeTableColumn.CellDataFeatures;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.control.cell.TreeItemPropertyValueFactory;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import javafx.util.Callback;
public class BasicTreeTableView extends Application{
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
HBox hBox = new HBox();
Button button = new Button("UPDATE");
hBox.getChildren().add(button);
Student student = new Student("root",123,true);
Student student2 = new Student("child",123,true);
TreeTableView<Student> treeView = new TreeTableView<Student>();
TreeItem<Student> rootItem = new TreeItem<Student>(student);
TreeItem<Student> childItem = new TreeItem<Student>(student2);
rootItem.getChildren().add(childItem);
treeView.setRoot(rootItem); // 指定root
rootItem.setExpanded(true); // 设置折叠
TreeTableColumn<Student, String> nameColumn = new TreeTableColumn<Student, String>("NAME");
nameColumn.setCellValueFactory(new TreeItemPropertyValueFactory<>("name"));
TreeTableColumn<Student, Number> scoreColumn = new TreeTableColumn<Student, Number>("SCORE");
scoreColumn.setCellValueFactory(new Callback<TreeTableColumn.CellDataFeatures<Student,Number>, ObservableValue<Number>>() {
@Override
public ObservableValue<Number> call(CellDataFeatures<Student, Number> param) {
// TODO Auto-generated method stub
return param.getValue().getValue().score;
}
});
scoreColumn.setCellFactory(new Callback<TreeTableColumn<Student,Number>, TreeTableCell<Student,Number>>() {
@Override
public TreeTableCell<Student, Number> call(TreeTableColumn<Student, Number> param) {
// TODO Auto-generated method stub
TreeTableCell<Student, Number> tableCell = new TreeTableCell<Student, Number>(){
@Override
protected void updateItem(Number item, boolean empty) {
// TODO Auto-generated method stub
super.updateItem(item, empty);
if(empty) {this.setGraphic(null);return;} //折叠问题
HBox hBox = new HBox();
hBox.setStyle("-fx-background-color:#FFFF55");
hBox.setAlignment(Pos.CENTER);
Button label = new Button(item.toString());
label.setOnAction((e)->{
System.out.println("ingo update");
hBox.setStyle("-fx-background-color:#AABBCC");
});
hBox.getChildren().add(label);
this.setGraphic(hBox);
}
};
return tableCell;
}
});
treeView.getColumns().add(nameColumn);
treeView.getColumns().add(scoreColumn);
hBox.getChildren().add(treeView);
Scene scene = new Scene(hBox);
primaryStage.setScene(scene);
primaryStage.show();
}
public class Student {
private SimpleStringProperty name = new SimpleStringProperty();
private SimpleIntegerProperty score = new SimpleIntegerProperty();
private SimpleBooleanProperty isCheck = new SimpleBooleanProperty();
public Student(String name, int score, boolean isCheck) {
super();
this.name.set(name);
this.score.set(score);
this.isCheck.set(isCheck);
}
public Student() {
}
public String getName() {
return name.get();
}
public void setName(String name) {
this.name.set(name);;
}
public int getScore() {
return score.get();
}
public void setScore(int score) {
this.score.set(score);
}
public boolean isCheck() {
return isCheck.get();
}
public void setCheck(boolean isCheck) {
this.isCheck.set(isCheck);
}
}
}