当前位置: 首页 > news >正文

洗化行业做网站外贸一站式推广服务

洗化行业做网站,外贸一站式推广服务,门头设计效果图网站,北京哪家做网站优化翻译自 Tree View 在本章中#xff0c;您将学习如何在JavaFX应用程序中构建树结构#xff0c;向树视图添加项#xff0c;处理事件以及通过实现和应用单元工厂来自定义树单元。 包的TreeView类javafx.scene.control提供了层次结构的视图。在每个树中#xff0c;层次结构…翻译自   Tree View 在本章中您将学习如何在JavaFX应用程序中构建树结构向树视图添加项处理事件以及通过实现和应用单元工厂来自定义树单元。 包的TreeView类javafx.scene.control提供了层次结构的视图。在每个树中层次结构中的最高对象称为“根”。根包含几个子项也可以有子项。没有孩子的项目称为“叶子”。 图13-1显示了具有树视图的应用程序的屏幕截图。 图13-1树视图示例 创建树视图 在JavaFX应用程序中构建树结构时通常需要实例化TreeView类定义多个TreeItem对象使其中一个树项成为根将根添加到树视图中将其他树项添加到根中。 您可以使用相应的TreeItem类构造函数或通过调用setGraphic方法使用图形图标来附加每个树项。图标的建议大小为16x16但事实上任何Node对象都可以设置为图标并且它将是完全交互式的。 例13-1是具有根和五个叶子的简单树视图的实现。 示例13-1创建树视图 import javafx.application.Application; import javafx.scene.Node; import javafx.scene.Scene; import javafx.scene.control.TreeItem; import javafx.scene.control.TreeView; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.StackPane; import javafx.stage.Stage;public class TreeViewSample extends Application {private final Node rootIcon new ImageView(new Image(getClass().getResourceAsStream(folder_16.png)));public static void main(String[] args) {launch(args);}Overridepublic void start(Stage primaryStage) {primaryStage.setTitle(Tree View Sample); TreeItemString rootItem new TreeItemString (Inbox, rootIcon);rootItem.setExpanded(true);for (int i 1; i 6; i) {TreeItemString item new TreeItemString (Message i); rootItem.getChildren().add(item);} TreeViewString tree new TreeViewString (rootItem); StackPane root new StackPane();root.getChildren().add(tree);primaryStage.setScene(new Scene(root, 300, 250));primaryStage.show();} } for通过调用getChildren和add方法将循环中创建的所有树项添加到根项。您也可以使用该addAll方法而不是add方法一次包含所有先前创建的树项。 如示例13-1所示您可以在TreeView创建新TreeView对象时在类的构造函数中指定树的根也可以通过调用类的方法来设置它。setRootTreeView setExpanded调用根项的方法定义了树视图项的初始外观。默认情况下所有TreeItem实例都已折叠必要时必须手动展开。将true值传递给setExpanded方法以便在应用程序启动时根树项看起来展开如图13-2所示。 图13-2具有五个树项的树视图 例13-1创建了一个包含String项目的简单树视图。但是树结构可以包含不同类型的项目。使用以下TreeItem构造函数的通用表示法来定义由树项表示的特定于应用程序的数据TreeItemT (T value)。该T值可以指定任何对象例如UI控件或自定义组件。 与TreeView类不同TreeItem该类不扩展Node类。因此您无法应用任何视觉效果或向树项目添加菜单。使用单元工厂机制克服此障碍并根据应用程序的需要为树项定义尽可能多的自定义行为。 实现Cell工厂 细胞工厂机制被用于生成TreeCell实例来表示单个TreeItem的TreeView。当您的应用程序使用动态更改或按需添加的过多数据进行操作时使用单元工厂尤其有用。 考虑一个可视化给定公司的人力资源数据的应用程序并使用户能够修改员工详细信息并添加新员工。 例13-2创建了Employee类并根据各自的部门安排员工。 示例13-2创建人力资源树视图模型 import java.util.Arrays; import java.util.List; import javafx.application.Application; import javafx.scene.Node; import javafx.scene.Scene; import javafx.scene.control.TreeItem; import javafx.scene.control.TreeView; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.paint.Color; import javafx.stage.Stage;import javafx.beans.property.SimpleStringProperty; import javafx.scene.layout.VBox;public class TreeViewSample extends Application {private final Node rootIcon new ImageView(new Image(getClass().getResourceAsStream(root.png)));private final Image depIcon new Image(getClass().getResourceAsStream(department.png));ListEmployee employees Arrays.EmployeeasList(new Employee(Ethan Williams, Sales Department),new Employee(Emma Jones, Sales Department),new Employee(Michael Brown, Sales Department),new Employee(Anna Black, Sales Department),new Employee(Rodger York, Sales Department),new Employee(Susan Collins, Sales Department),new Employee(Mike Graham, IT Support),new Employee(Judy Mayer, IT Support),new Employee(Gregory Smith, IT Support),new Employee(Jacob Smith, Accounts Department),new Employee(Isabella Johnson, Accounts Department));TreeItemString rootNode new TreeItemString(MyCompany Human Resources, rootIcon);public static void main(String[] args) {launch(args);}Overridepublic void start(Stage stage) {rootNode.setExpanded(true);for (Employee employee : employees) {TreeItemString empLeaf new TreeItemString(employee.getName());boolean found false;for (TreeItemString depNode : rootNode.getChildren()) {if (depNode.getValue().contentEquals(employee.getDepartment())){depNode.getChildren().add(empLeaf);found true;break;}}if (!found) {TreeItemString depNode new TreeItemString(employee.getDepartment(), new ImageView(depIcon));rootNode.getChildren().add(depNode);depNode.getChildren().add(empLeaf);}}stage.setTitle(Tree View Sample);VBox box new VBox();final Scene scene new Scene(box, 400, 300);scene.setFill(Color.LIGHTGRAY);TreeViewString treeView new TreeViewString(rootNode);box.getChildren().add(treeView);stage.setScene(scene);stage.show();}public static class Employee {private final SimpleStringProperty name;private final SimpleStringProperty department;private Employee(String name, String department) {this.name new SimpleStringProperty(name);this.department new SimpleStringProperty(department);}public String getName() {return name.get();}public void setName(String fName) {name.set(fName);}public String getDepartment() {return department.get();}public void setDepartment(String fName) {department.set(fName);}} } 例13-2中的每个Employee对象都有两个属性和。与雇员相对应的对象被称为树叶而与部门对应的树项被称为具有子项的树项。通过调用方法从对象中检索要创建的新部门的名称。namedepartmentTreeItemEmployeegetDepartment 编译并运行此应用程序时它会创建如图13-3所示的窗口。 图13-3树视图示例应用程序中的员工列表 使用示例13-2您可以预览树视图及其项目但不能更改现有项目或添加任何新项目。例13-3显示了实现单元工厂的应用程序的修改版本。修改后的应用程序使您可以更改员工的姓名。 示例13-3实现单元工厂 import java.util.Arrays; import java.util.List; import javafx.application.Application; import javafx.event.EventHandler; import javafx.scene.Node; import javafx.scene.Scene; import javafx.scene.control.TextField; import javafx.scene.control.TreeCell; import javafx.scene.control.TreeItem; import javafx.scene.control.TreeView; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import javafx.scene.paint.Color; import javafx.stage.Stage; import javafx.util.Callback;import javafx.beans.property.SimpleStringProperty; import javafx.scene.layout.VBox;public class TreeViewSample extends Application {private final Node rootIcon new ImageView(new Image(getClass().getResourceAsStream(root.png)));private final Image depIcon new Image(getClass().getResourceAsStream(department.png));ListEmployee employees Arrays.EmployeeasList(new Employee(Ethan Williams, Sales Department),new Employee(Emma Jones, Sales Department),new Employee(Michael Brown, Sales Department),new Employee(Anna Black, Sales Department),new Employee(Rodger York, Sales Department),new Employee(Susan Collins, Sales Department),new Employee(Mike Graham, IT Support),new Employee(Judy Mayer, IT Support),new Employee(Gregory Smith, IT Support),new Employee(Jacob Smith, Accounts Department),new Employee(Isabella Johnson, Accounts Department));TreeItemString rootNode new TreeItemString(MyCompany Human Resources, rootIcon);public static void main(String[] args) {Application.launch(args);}Overridepublic void start(Stage stage) {rootNode.setExpanded(true);for (Employee employee : employees) {TreeItemString empLeaf new TreeItemString(employee.getName());boolean found false;for (TreeItemString depNode : rootNode.getChildren()) {if (depNode.getValue().contentEquals(employee.getDepartment())){depNode.getChildren().add(empLeaf);found true;break;}}if (!found) {TreeItemString depNode new TreeItemString(employee.getDepartment(), new ImageView(depIcon));rootNode.getChildren().add(depNode);depNode.getChildren().add(empLeaf);}}stage.setTitle(Tree View Sample);VBox box new VBox();final Scene scene new Scene(box, 400, 300);scene.setFill(Color.LIGHTGRAY);TreeViewString treeView new TreeViewString(rootNode);treeView.setEditable(true);treeView.setCellFactory(new CallbackTreeViewString,TreeCellString(){Overridepublic TreeCellString call(TreeViewString p) {return new TextFieldTreeCellImpl();}});box.getChildren().add(treeView);stage.setScene(scene);stage.show();}private final class TextFieldTreeCellImpl extends TreeCellString {private TextField textField;public TextFieldTreeCellImpl() {}Overridepublic void startEdit() {super.startEdit();if (textField null) {createTextField();}setText(null);setGraphic(textField);textField.selectAll();}Overridepublic void cancelEdit() {super.cancelEdit();setText((String) getItem());setGraphic(getTreeItem().getGraphic());}Overridepublic void updateItem(String item, boolean empty) {super.updateItem(item, empty);if (empty) {setText(null);setGraphic(null);} else {if (isEditing()) {if (textField ! null) {textField.setText(getString());}setText(null);setGraphic(textField);} else {setText(getString());setGraphic(getTreeItem().getGraphic());}}}private void createTextField() {textField new TextField(getString());textField.setOnKeyReleased(new EventHandlerKeyEvent() {Overridepublic void handle(KeyEvent t) {if (t.getCode() KeyCode.ENTER) {commitEdit(textField.getText());} else if (t.getCode() KeyCode.ESCAPE) {cancelEdit();}}});}private String getString() {return getItem() null ? : getItem().toString();}}public static class Employee {private final SimpleStringProperty name;private final SimpleStringProperty department;private Employee(String name, String department) {this.name new SimpleStringProperty(name);this.department new SimpleStringProperty(department);}public String getName() {return name.get();}public void setName(String fName) {name.set(fName);}public String getDepartment() {return department.get();}public void setDepartment(String fName) {department.set(fName);}} } setCellFactory调用该treeView对象的方法会覆盖TreeCell实现并重新定义TextFieldTreeCellImpl类中指定的树项。 在TextFieldTreeCellImpl类创建了一个TextField针对每个树对象并提供方法来处理编辑事件。 请注意必须setEditable(true)在树视图上显式调用该方法才能编辑其所有项目。 编译并运行例13-3中的应用程序。然后尝试单击树中的员工并更改其名称。图13-4显示了在IT支持部门编辑树项目的时刻。 图13-4更改员工姓名 按需添加新树项 修改Tree View Sample应用程序以便人力资源代表可以添加新员工。使用示例13-4的粗体代码行作为参考。这些行将上下文菜单添加到与部门对应的树项目中。选择“添加员工”菜单项后新树项将作为叶添加到当前部门。 使用此isLeaf方法可以区分部门树项和员工树项。 示例13-4添加新树项 import java.util.Arrays; import java.util.List; import javafx.application.Application; import javafx.event.Event; import javafx.event.EventHandler; import javafx.scene.Node; import javafx.scene.Scene; import javafx.scene.control.TextField; import javafx.scene.control.TreeCell; import javafx.scene.control.TreeItem; import javafx.scene.control.TreeView; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import javafx.scene.paint.Color; import javafx.stage.Stage; import javafx.util.Callback;import javafx.beans.property.SimpleStringProperty; import javafx.scene.control.ContextMenu; import javafx.scene.control.MenuItem; import javafx.scene.layout.VBox;public class TreeViewSample extends Application {private final Node rootIcon new ImageView(new Image(getClass().getResourceAsStream(root.png)));private final Image depIcon new Image(getClass().getResourceAsStream(department.png));ListEmployee employees Arrays.EmployeeasList(new Employee(Ethan Williams, Sales Department),new Employee(Emma Jones, Sales Department),new Employee(Michael Brown, Sales Department),new Employee(Anna Black, Sales Department),new Employee(Rodger York, Sales Department),new Employee(Susan Collins, Sales Department),new Employee(Mike Graham, IT Support),new Employee(Judy Mayer, IT Support),new Employee(Gregory Smith, IT Support),new Employee(Jacob Smith, Accounts Department),new Employee(Isabella Johnson, Accounts Department));TreeItemString rootNode new TreeItemString(MyCompany Human Resources, rootIcon);public static void main(String[] args) {Application.launch(args);}Overridepublic void start(Stage stage) {rootNode.setExpanded(true);for (Employee employee : employees) {TreeItemString empLeaf new TreeItemString(employee.getName());boolean found false;for (TreeItemString depNode : rootNode.getChildren()) {if (depNode.getValue().contentEquals(employee.getDepartment())){depNode.getChildren().add(empLeaf);found true;break;}}if (!found) {TreeItem depNode new TreeItem(employee.getDepartment(), new ImageView(depIcon));rootNode.getChildren().add(depNode);depNode.getChildren().add(empLeaf);}}stage.setTitle(Tree View Sample);VBox box new VBox();final Scene scene new Scene(box, 400, 300);scene.setFill(Color.LIGHTGRAY);TreeViewString treeView new TreeViewString(rootNode);treeView.setEditable(true);treeView.setCellFactory(new CallbackTreeViewString,TreeCellString(){Overridepublic TreeCellString call(TreeViewString p) {return new TextFieldTreeCellImpl();}});box.getChildren().add(treeView);stage.setScene(scene);stage.show();}private final class TextFieldTreeCellImpl extends TreeCellString {private TextField textField;private ContextMenu addMenu new ContextMenu();public TextFieldTreeCellImpl() {MenuItem addMenuItem new MenuItem(Add Employee);addMenu.getItems().add(addMenuItem);addMenuItem.setOnAction(new EventHandler() {public void handle(Event t) {TreeItem newEmployee new TreeItemString(New Employee);getTreeItem().getChildren().add(newEmployee);}});}Overridepublic void startEdit() {super.startEdit();if (textField null) {createTextField();}setText(null);setGraphic(textField);textField.selectAll();}Overridepublic void cancelEdit() {super.cancelEdit();setText((String) getItem());setGraphic(getTreeItem().getGraphic());}Overridepublic void updateItem(String item, boolean empty) {super.updateItem(item, empty);if (empty) {setText(null);setGraphic(null);} else {if (isEditing()) {if (textField ! null) {textField.setText(getString());}setText(null);setGraphic(textField);} else {setText(getString());setGraphic(getTreeItem().getGraphic());if (!getTreeItem().isLeaf()getTreeItem().getParent()! null){setContextMenu(addMenu);}}}}private void createTextField() {textField new TextField(getString());textField.setOnKeyReleased(new EventHandlerKeyEvent() {Overridepublic void handle(KeyEvent t) {if (t.getCode() KeyCode.ENTER) {commitEdit(textField.getText());} else if (t.getCode() KeyCode.ESCAPE) {cancelEdit();}}}); }private String getString() {return getItem() null ? : getItem().toString();}}public static class Employee {private final SimpleStringProperty name;private final SimpleStringProperty department;private Employee(String name, String department) {this.name new SimpleStringProperty(name);this.department new SimpleStringProperty(department);}public String getName() {return name.get();}public void setName(String fName) {name.set(fName);}public String getDepartment() {return department.get();}public void setDepartment(String fName) {department.set(fName);}} } 编译并运行应用程序。然后在树结构中选择一个部门并右键单击它。出现上下文菜单如图13-5所示。 图13-5添加新员工的上下文菜单 从上下文菜单中选择“添加员工”菜单项时新记录将添加到当前部门。图13-6显示了添加到Accounts Department的新树项。 图13-6新增员工 由于已为树项启用了编辑因此可以将默认的“新员工”值更改为相应的名称。 使用树单元格编辑器 开始的JavaFX SDK 2.2可以使用可用下面的树单元格编辑器的API中CheckBoxTreeCellChoiceBoxTreeCellComboBoxTreeCellTextFieldTreeCell。类扩展了TreeCell实现以在单元内呈现特定控件。 例13-5演示了CheckBoxTreeCell在UI中使用类来构建复选框的层次结构。 示例13-5使用CheckBoxTreeCell类 import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.control.cell.CheckBoxTreeCell; import javafx.scene.layout.StackPane; import javafx.stage.Stage;public class TreeViewSample extends Application {public static void main(String[] args) {launch(args);}Overridepublic void start(Stage primaryStage) {primaryStage.setTitle(Tree View Sample); CheckBoxTreeItemString rootItem new CheckBoxTreeItemString(View Source Files);rootItem.setExpanded(true); final TreeView tree new TreeView(rootItem); tree.setEditable(true);tree.setCellFactory(CheckBoxTreeCell.StringforTreeView()); for (int i 0; i 8; i) {final CheckBoxTreeItemString checkBoxTreeItem new CheckBoxTreeItemString(Sample (i1));rootItem.getChildren().add(checkBoxTreeItem); }tree.setRoot(rootItem);tree.setShowRoot(true);StackPane root new StackPane();root.getChildren().add(tree);primaryStage.setScene(new Scene(root, 300, 250));primaryStage.show();} } 例13-5使用CheckBoxTreeItem类而不是TreeItem 构建树视图。该CheckBoxTreeItem班是专门设计用于支持树形结构的选择未选择的和不确定的状态。甲CheckBoxTreeItem实例可以是独立或从属。如果CheckBoxTreeItem实例是独立的则对其选择状态的任何更改都不会影响其父CheckBoxTreeItem实例和子实例。默认情况下所有ChechBoxTreeItem实例都是相关的。 编译并运行Example 13-5然后选择View Source Files项。您应该看到如图13-7所示的输出其中选择了所有子项。 图13-7从属CheckBoxTreeItem 要使CheckBoxTreeItem实例独立请使用以下setIndependent方法rootItem.setIndependent(true);。 运行TreeViewSample应用程序时其行为应如图13-8所示进行更改。 图13-8独立CheckBoxTreeItem 相关的API文档  TreeView TreeItem TreeCell Cell TextField CheckBoxTreeCell CheckBoxTreeItem
http://www.zqtcl.cn/news/657721/

相关文章:

  • 做视频网站犯法么华为公司网站建设案例分析
  • 陕煤化建设集团网站矿建二公司网站制作系统
  • 网站建设类别wordpress下载付费
  • 廊坊做网站的成都网站建设网站建设
  • 如何自己开网站网络服务检测与维护
  • 古镇网站建设熊掌号专业网站开发哪里有
  • 专业做网站服务上海网站开发哪家好
  • 科普重庆网站浙江网站开发
  • 怎么搭建自己的网站后台邹城网站建设哪家好
  • 二手房在哪个网站做合同wordpress 局域网 慢
  • 全包胶衣网站wordpress 3.1
  • 怎么仿照别人网站建电商网站
  • 网站每年维护费用天津智能网站建设
  • php开发网站建设仿摄影网站
  • 动漫网站源码下载百度指数是啥
  • 建站之星演示谷歌网站建站
  • wordpress是建站工具 还是语言表格制作
  • 北京中国建设银行招聘信息网站店标logo图片免费制作
  • 网站建设分金手指专业二七文章网站是怎么做的
  • 东莞网站设计企业怎么制作手机app及网站
  • 林州做网站下载做蛋糕网站
  • 做网站改版的做实验用哪些国外网站
  • 什么是静态页面网站甜品网站建设方案
  • 做一个网站大概多少钱养生网站源码
  • 淘宝客网站建设分类校园网站开发设计报告
  • 个人网站模板 免费儿童编程培训机构
  • 运动健身型网站开发免费ddns域名注册
  • 专业pc网站建设wordpress 支持php7.1
  • 廊坊网站制作系统虚拟服务器搭建
  • 做网站的优势wordpress百度索引链接