JavaFX UI控件教程(十四)之Tree View

翻译自   Tree View

在本章中,您将学习如何在JavaFX应用程序中构建树结构,向树视图添加项,处理事件以及通过实现和应用单元工厂来自定义树单元。

包的TreeViewjavafx.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");        TreeItem<String> rootItem = new TreeItem<String> ("Inbox", rootIcon);rootItem.setExpanded(true);for (int i = 1; i < 6; i++) {TreeItem<String> item = new TreeItem<String> ("Message" + i);            rootItem.getChildren().add(item);}        TreeView<String> tree = new TreeView<String> (rootItem);        StackPane root = new StackPane();root.getChildren().add(tree);primaryStage.setScene(new Scene(root, 300, 250));primaryStage.show();}
}

for通过调用getChildrenadd方法将循环中创建的所有树项添加到根项。您也可以使用该addAll方法而不是add方法一次包含所有先前创建的树项。

如示例13-1所示,您可以在TreeView创建新TreeView对象时在类的构造函数中指定树的根,也可以通过调用类的方法来设置它。setRootTreeView

setExpanded调用根项的方法定义了树视图项的初始外观。默认情况下,所有TreeItem实例都已折叠,必要时必须手动展开。将true值传递给setExpanded方法,以便在应用程序启动时根树项看起来展开,如图13-2所示。

图13-2具有五个树项的树视图

例13-1创建了一个包含String项目的简单树视图。但是,树结构可以包含不同类型的项目。使用以下TreeItem构造函数的通用表示法来定义由树项表示的特定于应用程序的数据:TreeItem<T> (T value)。该T值可以指定任何对象,例如UI控件或自定义组件。

TreeView类不同,TreeItem该类不扩展Node类。因此,您无法应用任何视觉效果或向树项目添加菜单。使用单元工厂机制克服此障碍,并根据应用程序的需要为树项定义尽可能多的自定义行为。

 

实现Cell工厂

细胞工厂机制被用于生成TreeCell实例来表示单个TreeItemTreeView。当您的应用程序使用动态更改或按需添加的过多数据进行操作时,使用单元工厂尤其有用。

考虑一个可视化给定公司的人力资源数据的应用程序,并使用户能够修改员工详细信息并添加新员工。

例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"));List<Employee> employees = Arrays.<Employee>asList(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"));TreeItem<String> rootNode = new TreeItem<String>("MyCompany Human Resources", rootIcon);public static void main(String[] args) {launch(args);}@Overridepublic void start(Stage stage) {rootNode.setExpanded(true);for (Employee employee : employees) {TreeItem<String> empLeaf = new TreeItem<String>(employee.getName());boolean found = false;for (TreeItem<String> depNode : rootNode.getChildren()) {if (depNode.getValue().contentEquals(employee.getDepartment())){depNode.getChildren().add(empLeaf);found = true;break;}}if (!found) {TreeItem<String> depNode = new TreeItem<String>(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);TreeView<String> treeView = new TreeView<String>(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"));List<Employee> employees = Arrays.<Employee>asList(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"));TreeItem<String> rootNode = new TreeItem<String>("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) {TreeItem<String> empLeaf = new TreeItem<String>(employee.getName());boolean found = false;for (TreeItem<String> depNode : rootNode.getChildren()) {if (depNode.getValue().contentEquals(employee.getDepartment())){depNode.getChildren().add(empLeaf);found = true;break;}}if (!found) {TreeItem<String> depNode = new TreeItem<String>(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);TreeView<String> treeView = new TreeView<String>(rootNode);treeView.setEditable(true);treeView.setCellFactory(new Callback<TreeView<String>,TreeCell<String>>(){@Overridepublic TreeCell<String> call(TreeView<String> p) {return new TextFieldTreeCellImpl();}});box.getChildren().add(treeView);stage.setScene(scene);stage.show();}private final class TextFieldTreeCellImpl extends TreeCell<String> {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 EventHandler<KeyEvent>() {@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"));List<Employee> employees = Arrays.<Employee>asList(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"));TreeItem<String> rootNode = new TreeItem<String>("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) {TreeItem<String> empLeaf = new TreeItem<String>(employee.getName());boolean found = false;for (TreeItem<String> 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);TreeView<String> treeView = new TreeView<String>(rootNode);treeView.setEditable(true);treeView.setCellFactory(new Callback<TreeView<String>,TreeCell<String>>(){@Overridepublic TreeCell<String> call(TreeView<String> p) {return new TextFieldTreeCellImpl();}});box.getChildren().add(treeView);stage.setScene(scene);stage.show();}private final class TextFieldTreeCellImpl extends TreeCell<String> {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 TreeItem<String>("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 EventHandler<KeyEvent>() {@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");        CheckBoxTreeItem<String> rootItem = new CheckBoxTreeItem<String>("View Source Files");rootItem.setExpanded(true);                  final TreeView tree = new TreeView(rootItem);  tree.setEditable(true);tree.setCellFactory(CheckBoxTreeCell.<String>forTreeView());    for (int i = 0; i < 8; i++) {final CheckBoxTreeItem<String> checkBoxTreeItem = new CheckBoxTreeItem<String>("Sample" + (i+1));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.mzph.cn/news/325069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET Core 指定环境发布(hosting environment)

ASP.NET Core 应用程序发布命令&#xff1a; dotnet publish [<PROJECT>] [-f|--framework] [-r|--runtime] [-o|--output] [-c|--configuration] [--version-suffix] [-v|--verbosity] [-h|--help] 发布示例命令&#xff08;生成在bin/release/netcoreapp1.1/publish目…

求素数为什么到平方根就行了

package com.wdl.day05;/* 100000以内的所有质数的输出。实现方式一 质数&#xff1a;素数&#xff0c;只能被1和它本身整除的自然数。-->从2开始&#xff0c;到这个数-1结束为止&#xff0c;都不能被这个数本身整除。对PrimeNumberTest.java文件中质数输出问题的优化 */ pu…

JavaFX UI控件教程(十五)之Combo Box

翻译自 Combo Box 本章介绍如何在JavaFX应用程序中使用组合框。它讨论了可编辑和不可编辑的组合框&#xff0c;教您如何跟踪可编辑组合框中的更改并处理它们上的事件&#xff0c;并解释如何使用单元工厂来更改组合框的默认实现。 组合框是用户界面的典型元素&#xff0c;使…

Boostrap技能点整理之【按钮样式】

昨天我们看了看bootstrap的网&#xff08;栅&#xff09;格系统&#xff0c;想必都对bootstrap网格系统有个大致的了解&#xff0c;今天我们再来看看bootstrap的按钮组合。按钮的样式在boostrap中&#xff0c;任何带有 class .btn 的元素都会继承圆角灰色按钮的默认外观。但是 …

MyBatis中的缓存

01 Mybatis中的缓存简介 缓存的好处&#xff1a;只是查询才有缓存 &#xff08;增删改没有缓存的&#xff09;&#xff0c;可以增块访问的速度 sqlsession级缓存 &#xff08;一级缓存&#xff09; 默认开启的 所有的操作是公用同一个SQLsession对象并且执行的是同一条SQL语句的…

基于VS2017的Docker Support体检ASP.NET Core站点的Docker部署

最近在学习如何用 Docker 部署生产环境中的 ASP.NET Core 站点&#xff0c;作为一个 Docer 新手&#xff0c;从何处下手更容易入门呢&#xff1f;一开始就手写 Docker 配置文件&#xff08;Docfile, docker-compose.yml&#xff09;容易让人产生挫败感&#xff0c;想到 Visual …

JavaFX UI控件教程(十六)之Separator

翻译自 Separator 本章介绍如何使用分隔符组织JavaFX应用程序的UI组件。 SeparatorJavaFX API中可用的类表示水平或垂直分隔线。它用于划分应用程序用户界面的元素&#xff0c;不会产生任何操作。但是&#xff0c;您可以设置样式&#xff0c;对其应用视觉效果&#xff0c;甚…

eclipse下载与安装步骤详解,包含解决错误(最全最详细,多图)

以前一直用的是myeclipse,今天有幸接触eclipse,那我们就先来安装的配置一下&#xff0c;下载地址&#xff1a;公众号中回复常用软件下载&#xff0c;下载完成以后就可以安装了&#xff0c;首先我们来先安装jdk1.7,打开jdk的安装包双击即可&#xff0c;直接点击下一步&#xff1…

微软中国Azure开源开发者(深圳)研讨会

时间&#xff1a;2017年6月28日 地点&#xff1a;深圳福田香格里拉大酒店 微软开发技术与云平台自从迈向开放、开源、跨平台的转型以来&#xff0c;已经受到全球开源社区们的关注。从Github 上高居世界首位的开源项目贡献数量&#xff0c;可以看到微软贯彻开源战略的实际行动。…

JavaFX UI控件教程(十七)之Slider

翻译自 Slider 在本章中&#xff0c;您将学习如何在JavaFX应用程序中使用滑块来显示和与一系列数值进行交互。 该Slider控件由一个轨道和一个可拖动的拇指组成。它还可以包括刻度线和刻度标签&#xff0c;用于指示范围的数值。图16-1显示了一个典型的滑块并指出了它的主要元…

Photoshop中将图片拖不进软件的编辑区的解决方法,超详细

今天在学习ps的过程中&#xff0c;发现我的ps怎么和人家老师的不一样&#xff0c;怎么不一样呢&#xff1f;人家老师的ps5中&#xff0c;鼠标可以直接拖到ps的编辑栏中&#xff0c;可是我的死活拖不进去。怎么办&#xff1f;怎么办&#xff1f;经过自己瞎鼓捣和上网查&#xff…

IdentityServer4 指定角色授权(Authorize(Roles=amp;quot;adminamp;quot;))

1. 业务场景 IdentityServer4 授权配置Client中的AllowedScopes&#xff0c;设置的是具体的 API 站点名字&#xff0c;也就是使用方设置的ApiName&#xff0c;示例代码&#xff1a; //授权中心配置new Client{ ClientId "client_id_1", AllowedGrantTypes G…

JavaFX UI控件教程(十八)之Progress Bar和Progress Indicator

翻译自 Progress Bar and Progress Indicator 在本章中&#xff0c;您将了解进度指示器和进度条&#xff0c;以及可视化JavaFX应用程序中任何操作进度的UI控件。 本ProgressIndicator类及其直接子类ProgressBar所提供的功能&#xff0c;以表明特定的任务是处理和检测是如何工…

你不知道ADo.Net中操作数据库的步骤【超详细整理】

1.先创建数据库连接字符串&#xff1a; string strcon "Data Source.;Initial CatalogschoolDB;Integrated SecurityTrue";2.创建SqlConnection对象&#xff0c;需要注意的是SqlConnection对象在using System.Data.SqlClient;命名空间中。 SqlConnection conn new…

C# 7.2和8.0路线图

C# 7.2和8.0的许多新功能已经列入了计划&#xff0c;其中包括空引用类型和有限形式的多重继承。 只读引用和只读结构体 [7.2原型] 首先提到的是只读引用和结构体。简单来讲&#xff0c;这项特性使得C#能够使用类似const的参数来提高性能。像我们所知道的“ref只读参数”和简单…

MyBatis中的原理

01Mybatis的运行原理 运行过程中涉及到的类 1.1 Resources MyBatis中IO流的工具类 1.1 加载配置文件 1.2 SqlSessionFactoryBuilder() 构建器 1.2.1 作用:创建SqlSessionFactory接口的实现类 1.3 XMLConfigBuilder MyBatis全局配置文件内容构建器类 1.3.1 作用负责读取流内容并…

JavaFX UI控件教程(十九)之Hyperlink

翻译自 Hyperlink 本章介绍Hyperlink用于将文本格式化为超链接的控件。 所述Hyperlink类表示另一种类型的Labeled控制。图18-1演示了默认超链接实现的三种状态。 图18-1超链接控制的三种状态 创建超链接 示例18-1中显示了生成超链接的代码片段。 例18-1典型的超链接 Hype…

杨辉三角形

package com.wdl.day07;/*** 创建人 wdl* 创建时间 2021/8/8* 描述*/ public class YangHuiTest {public static void main(String[] args) {int[][] yanghui new int[10][];for (int i 0; i < yanghui.length; i) {yanghui[i] new int[i 1];yanghui[i][0] 1;yanghui[i…

致我们最最最最最最最最最最最最最优秀的班主任——王老师

今天不说java&#xff0c;也不表C#&#xff0c;只来叙叙我们最最最最最最最最最最最最最优秀的班主任————王老师。亲爱的王老师&#xff0c;一起为3班孩子们的学业共同努力而使我倍感荣幸。回想从我们班报道以来&#xff0c;大大小小的各种奖状铺满那墨绿黑板的右侧&#x…

Asp.Net Core 发布到IIS

一、Asp.Net Core 发布到IIS 1.许多时候在WindowsServer服务器上已经安装了IIS&#xff0c;监听80端口&#xff0c;那么Asp.Net Core应用的自宿主就没法监听80端口 2.也就是在Widnows系统已经启用IIS服务的情况下&#xff0c;需要安装 NET Core Windows Server Hosting&#…