javafX8初探(树形表格)
来源:互联网 发布:苹果4s怎么升级4g网络 编辑:程序博客网 时间:2024/06/05 15:24
本章描述TreeTableView用户组件,这个组件让你能够在列中设计可视化的无限制层级数据。
TreeTableView和TreeView和TableView有共同之处。它结合了两者的功能。
创建一个TreeTableView控件
一个基本的TreeTableView的实现可以按照下面的步骤:
1:创建TreeItem
2:创建根节点
3:添加TreeItem到根节点
4:创建一个或多列
5:定义单元格内容
6:创建TreeTableView
7:关联列和TreeTableView
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 TreeTableViewSample extends Application { public static void main(String[] args) { Application.launch(args); } @Override public void start(Stage stage) { stage.setTitle("Tree Table View Samples"); final Scene scene = new Scene(new Group(), 200, 400); Group sceneRoot = (Group)scene.getRoot(); //Creating tree items final TreeItem<String> childNode1 = new TreeItem<>("Child Node 1"); final TreeItem<String> childNode2 = new TreeItem<>("Child Node 2"); final TreeItem<String> childNode3 = new TreeItem<>("Child Node 3"); //Creating the root element final TreeItem<String> root = new TreeItem<>("Root node"); root.setExpanded(true); //Adding tree items to the root root.getChildren().setAll(childNode1, childNode2, childNode3); //Creating a column TreeTableColumn<String,String> column = new TreeTableColumn<>("Column"); column.setPrefWidth(150); //Defining cell content column.setCellValueFactory((CellDataFeatures<String, String> p) -> new ReadOnlyStringWrapper(p.getValue().getValue())); //Creating a tree table view final TreeTableView<String> treeTableView = new TreeTableView<>(root); treeTableView.getColumns().add(column); treeTableView.setPrefWidth(152); treeTableView.setShowRoot(true); sceneRoot.getChildren().add(treeTableView); stage.setScene(scene); stage.show(); } }
创建了一个简单的树形视图,只有一列,很多时候我们需要多个列。
添加多个列
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.TreeTableColumn;import javafx.scene.control.TreeItem;import javafx.scene.control.TreeTableView;import javafx.scene.image.Image;import javafx.scene.image.ImageView;import javafx.scene.paint.Color;import javafx.stage.Stage; public class TreeTableViewSample 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")); private final ImageView depIcon = new ImageView ( new Image(getClass().getResourceAsStream("department.png")) ); final TreeItem<Employee> root = new TreeItem<>(new Employee("Sales Department", ""), depIcon); public static void main(String[] args) { Application.launch(TreeTableViewSample.class, args); } @Override public void start(Stage stage) { root.setExpanded(true); employees.stream().forEach((employee) -> { root.getChildren().add(new TreeItem<>(employee)); }); stage.setTitle("Tree Table View Sample"); final Scene scene = new Scene(new Group(), 400, 400); scene.setFill(Color.LIGHTGRAY); Group sceneRoot = (Group) scene.getRoot(); 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); sceneRoot.getChildren().add(treeTableView); stage.setScene(scene); stage.show(); } 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); } }}
改变外观
你可以展示出表格菜单按钮,这样用户就可以根据个人需要来打开或关闭列。通过调用treeTableView.setTableMenuButtonVisble(true)
你也可以控制根节点是否显示,通过调用:treeTableView.setShowRoot(false);
管理选择模式
默认的选择模式是SelectionMode.SINGLE
我们可以使用下面的方法,来支持多选。
treeTableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);treeeTableView.getSelectionModel().setCellSelectionEnabled(true);
0 0
- javafX8初探(树形表格)
- javafX8初探(表格)
- javaFX8初探(特性)
- javafX8初探(列表)
- javafX8初探(树)
- javafX8初探(超链接)
- javafX8初探(提示)
- javaFX8初探(环境搭建)
- javaFX8初探(HelloWorld应用)
- javaFX8初探(登录表单)
- javafX8初探(滚动面板)
- javafX8初探(组合框)
- javafX8初探(分隔符)
- javafX8初探(滑块)
- javafX8初探(标题面板)
- JavaFX8初探(HTML编辑器)
- JavaFX8初探(分页控件)
- JavaFX8初探(文件选择器)
- Microsoft Fakes初探
- iOS8 UIKeyInput protocol
- MyEclipse修改HTML,JSP的默认打开方式
- 自己动手写编译器、链接器-第八章
- nginx-并发模型
- javafX8初探(树形表格)
- VS2010中调用matlab文件,没有找到mclmcr.dll,应用程序未能启动
- EditPlus配置问题
- 自己动手写编译器、链接器-第八章
- pac文件中的proxy地址
- 关于 Relative Reference url
- Windows has triggered a breakpoint in ***.exe.
- 自己动手写编译器、链接器-第九章
- 【jQwidgets】千分位