javafx2.0表格框tableview

合集下载

JavaFX表格数据显示简单Demo

JavaFX表格数据显示简单Demo

JavaFX表格数据显⽰简单Demo 最近业务需求,需要点击⼀个按钮然后显⽰数值,初涉JavaFX,查看了相关的⽂档,简单的做了⼀个Demo 1、⾸先⽤Java secene builder做出⼀个页⾯,页⾯如下:设置好各个组件的fx:id。

如下所⽰:1 @FXML2private ResourceBundle resources;34 @FXML5private URL location;67 @FXML8private TableColumn<MaterialInfo, String> codeCol;910 @FXML11private TableColumn<MaterialInfo, String> createDateCol;1213 @FXML14private TableView<MaterialInfo> dataTable; //tableView1516 @FXML17private TableColumn<MaterialInfo, String> isActiveCol;1819 @FXML20private TableColumn<MaterialInfo, String> nameCol;2122 @FXML23private Label nowDate;2425 @FXML26private TableColumn<MaterialInfo, String> seqnumCol;2728 @FXML29private TableColumn<MaterialInfo, String> shortCodeCol;3031 @FXML32private Button showData;3334 @FXML35private Button udateDate;3637private List<MaterialInfo> materialList = new ArrayList<MaterialInfo>(); //放置数据的集合38394041 ObservableList<MaterialInfo> list = FXCollections.observableArrayList(); //javaFX 的数据集合初始化该Sence,其中定义的MterialInfo是放置每列的,具体如下:1private SimpleStringProperty num;2private SimpleStringProperty name;3private SimpleStringProperty code;4private SimpleStringProperty shortCode;56private SimpleStringProperty isActive;7private SimpleStringProperty createDate;89public String getNum(){10return num.get();11 }1213public String getName(){14return name.get();15 }1617public String getCode(){18return code.get();19 }2021public String getShortCode(){22return shortCode.get();23 }2425public String getIsActive(){26return isActive.get();27 }2829public String getCreateDate(){30return createDate.get();31 }3233public ObservableValue<String> numProperty(){34return num;35 }36public ObservableValue<String> nameProperty(){37return name;38 }39public ObservableValue<String> codeProperty(){40return code;41 }42public ObservableValue<String> shortCodeProperty(){43return shortCode;44 }45public ObservableValue<String> isActiveProperty(){46return isActive;47 }48public ObservableValue<String> createDateProperty(){49return createDate;50 }5152public void setNum(String num){53this.num = new SimpleStringProperty(num);5455 }56public void setName(String name){ = new SimpleStringProperty(name);5859 }60public void setCode(String code){61this.code = new SimpleStringProperty(code);6263 }64public void setShortCode(String shortCode){65this.shortCode = new SimpleStringProperty(shortCode);6667 }68public void setIsActive(String isActive){69this.isActive = new SimpleStringProperty(isActive);7071 }72public void setCreateDate(String createDate){73this.createDate = new SimpleStringProperty(createDate);7475 }76然后初始化Sence1 @Override2public void initialize(URL location, ResourceBundle resources) {3 Date date = new Date();4 String now = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);5 nowDate.setText(now);6 dataTable.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);7 configTableView();8 initButton();9 }1/**2 * 配置表格,绑定表格的每列3*/4private void configTableView() {5 seqnumCol.setCellValueFactory(new PropertyValueFactory<MaterialInfo,String>("num"));6 nameCol.setCellValueFactory(new PropertyValueFactory<MaterialInfo,String>("name"));7 codeCol.setCellValueFactory(new PropertyValueFactory<MaterialInfo,String>("code"));8 shortCodeCol.setCellValueFactory(new PropertyValueFactory<MaterialInfo,String>("shortCode"));9 isActiveCol.setCellValueFactory(new PropertyValueFactory<MaterialInfo,String>("isActive"));10 createDateCol.setCellValueFactory(new PropertyValueFactory<MaterialInfo,String>("createDate"));11 dataTable.setItems(list);12 }1314/**15 * 初始化按钮功能,绑定按钮的事件16*/17private void initButton() {1819 showData.setOnAction(new EventHandler<ActionEvent>() {2021 @Override22public void handle(ActionEvent arg0) {23 dataTable.getItems().clear();24 showData();25 }26 });27 udateDate.setOnAction(new EventHandler<ActionEvent>() {2829 @Override30public void handle(ActionEvent arg0) {31 updateData();//该⽅法还没有做,以后补上32 }333435 });36 }373839protected void updateData() {40// TODO Auto-generated method stub4142 }4344/**45 * 展⽰数据46*/47protected void showData() {48if(generateDate()!=null){49 materialList = generateDate();50 }51 System.out.println(materialList.size()+"----"+materialList.get(0).getName());52 list.addAll(materialList);53 dataTable.setItems(list);54 }5556/**57 * ⽣成数据58 * @return59*/60private List<MaterialInfo> generateDate() {61 List<MaterialInfo> miList = new ArrayList<MaterialInfo>();62 String name = "material";63 String code = "1101";64 String shortCode = "A";65 String isActive = "是";66 Date date = new Date();67 String nowDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:").format(date); 68for(int i=0;i<10;i++){69 MaterialInfo mi = new MaterialInfo();70 mi.setNum(i+1+"");71 mi.setName(name+i);72 mi.setCode(code+i);73 mi.setIsActive(isActive);74 mi.setShortCode(shortCode+i);75 mi.setCreateDate(nowDate+i);76 miList.add(mi);77 }78return miList;79 }⾄此结束,程序运⾏成功。

Java图形用户界面:Swing和JavaFX的简单介绍

Java图形用户界面:Swing和JavaFX的简单介绍

Java图形用户界面:Swing和JavaFX的简单介绍在计算机科学领域中,图形用户界面(GUI)是指通过图形、图像和视觉元素来与计算机程序进行交互的界面。

Java作为一种广泛使用的编程语言,提供了多种选择来构建图形用户界面。

其中,Swing和JavaFX是最常用的两种选择。

本文将对这两种Java GUI工具进行简单介绍,并探讨它们的特点和用途。

一、SwingSwing是Java提供的一套GUI工具包,旨在提供一种跨平台的解决方案。

它是在AWT(抽象窗口工具包)的基础上开发的,为开发者提供了一系列可重用的GUI组件,如按钮、文本框、标签等。

Swing的特点之一是其轻量级性能,它不依赖于操作系统的原生GUI组件,而是完全由Java代码实现。

这使得Swing应用程序可以在不同操作系统上以相同的方式运行,而无需进行任何修改。

Swing提供了丰富的组件库,使得开发者可以轻松构建复杂的用户界面。

它还支持可定制的外观和感觉,开发者可以根据自己的需求选择不同的外观主题。

此外,Swing还提供了一些高级组件,如表格、树形结构和滚动面板,使得开发者可以创建更复杂和功能强大的界面。

然而,Swing也有一些缺点。

由于其完全由Java代码实现的特性,Swing应用程序可能在性能方面存在一些问题。

尤其是在处理大量数据或复杂图形时,Swing的性能可能会受到影响。

此外,Swing的外观和感觉可能与操作系统的原生界面存在一些差异,这可能会对用户体验造成一定的影响。

二、JavaFXJavaFX是Java平台上的另一种GUI工具,它提供了更现代化和富有表现力的用户界面。

与Swing不同,JavaFX使用了一种基于场景图的方式来构建界面。

它通过使用FXML(一种基于XML的用户界面描述语言)和CSS(层叠样式表)来分离界面的结构和样式,使得界面的定制变得更加灵活和简单。

JavaFX提供了许多内置的UI组件,如按钮、文本框、标签等,这些组件具有更丰富的视觉效果和交互特性。

JavaFX常用汇总

JavaFX常用汇总

JavaFX常⽤汇总1. 描述备注1.1 参考教程1.5 安装a). 在线安装e(fx)clipse插件b).c). eclipse重启以后,windows->preference->javaFx->SceneBuilder executable选择上⼀步中安装后的exe⽂件2.a). *.fxml⽂件中定义scene(内容区域)的布局,使⽤fx:controller指定绑定类,Button等组件必须⽤fx:id(Code下的fx:id属性)指定id,Code中可以指定绑定的动作b). *action.java中使⽤ @FXML注解将fx:id和java中变量关联起来c). main⽅法中加载*.fxml⽂件形成界⾯3. JavaFX布局AnchorPane 允许将⼦节点边缘定位到其⽗节点的边缘。

不调整⼦节点⼤⼩。

ScrollPane 滚动条布局HBox 包含单⾏节点。

⼦节点⼤⼩⽔平调整⾄其⾸选宽度,但各⼦节点可以显式设置为⽔平增加⾄其最⼤宽度。

默认情况下,⼦节点⼤⼩垂直调整⾄其最⼤⾼度。

VBox 包含单列节点。

⼦节点⼤⼩垂直调整⾄其⾸选⾼度,但各⼦节点可以显式设置为垂直增加⾄其最⼤⾼度。

默认情况下,⼦节点⼤⼩⽔平调整⾄其最⼤宽度。

BorderPane 提供经典顶部、左侧、右侧、底部、中⼼⼦节点放置。

⽔平调整位于顶部和底部的⼦节点的⼤⼩,垂直调整位于左侧和右侧的⼦节点的⼤⼩,同时在⽔平和垂直⽅向调整位于中⼼的节点的⼤⼩。

所有⼤⼩调整最⼤可调整⾄节点在相关⽅向上的最⼤⼤⼩。

StackPane 将⼦节点从背景切换到前景。

调整⼦节点⼤⼩以填充⽗节点⼤⼩(直⾄每个节点的最⼤宽度和⾼度)。

TilePane 提供换⾏的⽔平或垂直均匀的“平铺”流。

调整⼦节点的⼤⼩以填充平铺的⼤⼩(直⾄节点的最⼤宽度和⾼度)。

FlowPane 提供换⾏的⽔平或垂直⼦节点流。

不调整⼦节点⼤⼩。

GridPane 将⼦节点置于弹性⽹格中,这⾮常适合复杂布局。

JavaFX2.0网格布局窗格GridPane

JavaFX2.0网格布局窗格GridPane

JavaFX2.0网格布局窗格GridPanepublic class GridPane extends PaneGridPane将其孩子结点灵活地放置在行列网格中。

若设置了边框和边缘(border and/or padding),它的内容只能在这些间隙内部。

孩子结点可以放置在任意位置并且可以跨行列。

结点也可以在行列内随便覆盖,网格窗格孩子结点列表中的顺序决定了这些结点的堆栈顺序:第一个在最下,最后一个在上面。

GridPane也可以使用CSS来装饰。

网格约束孩子结点的位置由其布局约束来定义:若孩子结点的位置没被指定,则将其放入第一行列中。

若跨行列数没有指定,默认为1。

孩子结点的位置约束可以动态修改,网格窗格会随着更新。

总的行列数无需指定,窗格会根据内容自动扩展和收缩。

使用GridPane时,程序需要为孩子结点指定布局约束并将它们加入窗格中。

约束使用的是该类的静态setter方法:1.GridPane gridpane = new GridPane();2.3.// Set one constraint at a time...4.Button button = new Button();5.GridPane.setRowIndex(button, 1);6.GridPane.setColumnIndex(button, 2);7.8.// or convenience methods set more than one constraint at once...bel label = new Label();10.GridPane.setConstraints(label, 3, 1);11.12.// column=3 row=113.14.// don't forget to add children to gridpane15.gridpane.getChildren().addAll(button, label);更可以使用整合了以上步骤的方法来设置约束:1.GridPane gridpane = new GridPane();2.gridpane.add(new Button(), 2, 1);3.4.// column=2 row=15.gridpane.add(new Label(), 3, 1);6.7.// column=3 row=1行列大小行列尺寸默认是匹配内容的,列宽适应的是最宽的元素,行高适应的是最高的元素。

JavaFX2.0的FXML语言

JavaFX2.0的FXML语言

FXML是JavaFX 2.0新引入的。

你可能会问"What is FXML?" 和"Is FXML for me?" FXML 是基于XML的一种声明性标记语言,用来定义应用的用户接口。

FXML对于定义静态的布局很便利,诸如form, control, 和table。

使用FXML也可以动态构造布局,不过要结合脚本。

FXML是一个优势是基于XML,所以多数开发者,尤其是web开发者和其他RIA平台的开发者会很熟悉它。

另一个优势是FXML 不是编译型语言,不需要编译后才能看出变化。

第三个好处是可以很简单的看到应用场景的结构。

反过来,也就很简单地可以在组内进行合作开发用户接口。

要对比JavaFX和FXML,看图Figure 1 .构成该应用的场景包括一个边框布局,在它的顶部和中间各有一个标签。

Figure 1 Border Pane Simple ExampleDescription of "Figure 1 Border Pane Simple Example"Example 1是相应的JavaFX代码.Example 1 JavaFX Scene GraphBorderPane border = new BorderPane();Label toppanetext = new Label("Page Title");border.setTop(toppanetext);Label centerpanetext = new Label ("Some data here");border.setCenter(centerpanetext);Example 2是相应的FXML.Example 2 FXML Scene Graph<BorderPane><top><Label text="Page Title"/></top><center><Label text="Some data here"/></center></BorderPane>展示FXML优势的最好方法是例子。

javafx listview 用法

javafx listview 用法

javafx listview 用法JavaFX ListView 用法JavaFX是一种用于创建丰富图形用户界面的GUI工具包。

JavaFX中的ListView 是一种常用的控件,用于显示列表形式的数据。

在本文中,我们将探讨JavaFX ListView的用法,以及如何使用ListView显示和处理数据。

一、创建ListView要使用JavaFX ListView,首先需要在代码中创建一个ListView对象。

下面是创建ListView的基本步骤:Step 1: 导入JavaFX相关类在代码文件的顶部,添加JavaFX类库的导入语句。

例如:javaimport javafx.scene.control.ListView;Step 2: 创建ListView对象在代码文件的类定义中,声明一个ListView对象。

例如:javaListView<String> listView = new ListView<>();这里的`String`是列表中的每个项的类型。

您可以根据需要将其替换为其他数据类型。

Step 3: 设置ListView的大小和位置通过设置ListView的宽度、高度和位置,将其放置在JavaFX的场景中。

javalistView.setPrefSize(300, 200);listView.setLayoutX(10);listView.setLayoutY(10);二、向ListView中添加数据一旦创建了ListView对象,我们可以向其中添加数据。

ListView可以通过ObservableList来管理其数据。

Step 1: 导入相关类在代码文件的顶部,添加用于管理ListView数据的类的导入语句。

例如:javaimport javafx.collections.FXCollections;import javafx.collections.ObservableList;Step 2: 创建ObservableList对象在代码文件的类定义中,声明一个ObservableList对象来存储ListView的数据。

tableview 和table widget使用案例

tableview 和table widget使用案例

tableview 和table widget使用案例`TableView` 和 `TableWidget` 是两种常用的表格控件,它们在各种应用程序中都有广泛的应用。

下面我将分别给出使用这两种控件的简单案例。

1. 使用 `TableView` 的案例(Python + PyQt5):假设我们有一个简单的数据集,我们想在 `TableView` 中展示它。

```pythonimport sysfrom import QApplication, QTableViewfrom import QStandardItemModelapp = QApplication()创建一个模型model = QStandardItemModel()填充数据data = [['Name', 'Age', 'Gender'],['Alice', '25', 'Female'],['Bob', '30', 'Male'],['Charlie', '35', 'Male']]for row in data:(row)创建一个视图并设置模型table_view = QTableView()table_(model)table_()(_())```2. 使用 `TableWidget` 的案例(Python + PyQt5): 与上面的例子类似,但这次我们使用 `TableWidget`。

```pythonimport sysfrom import QApplication, QTableWidgetfrom import Qt, QAbstractItemModelapp = QApplication()创建一个模型class SimpleModel(QAbstractItemModel):def __init__(self, data):QAbstractItemModel.__init__(self)self._data = dataself._column_count = len(data[0]) if data else 0self._row_count = len(data) if data else 0def rowCount(self, parent=None): return self._row_countdef columnCount(self, parent=None): return self._column_count def data(self, index, role=):if role == :return self._data[()][()] if 0 <= () < len(self._data) else None def index(self, row, column, parent=None):return (row, column) if 0 <= row < self._row_count and 0 <= column < self._column_count else Nonedef parent(self, index): return None No parent for top-level items. def headerData(self, section, orientation, role): return None No header.def setData(self, index, value, role): return False Read-only data. def indexWidget(self, index): return None No widgets for cells.def flags(self, index):if not (): returnreturn Cells are editable.def removeRows(self, row, count, parent=None):if row >= 0 and row + count <= self._row_count: delself._data[row:row+count]return True if row >= 0 and count > 0 else False Returns whether the rows were removed.def insertRows(self, row, count, parent=None):if row >= 0 and count > 0: self._(row, [''] self._column_count) return True if row >= 0 and count > 0 else False Returns whether the rows were inserted.def blockSignals(self, block): pass No signals are emitted when rows are inserted or removed.def reset(self): pass No model support for reset().def clear(self): self._data = [] Clearing the model removes all rows from the view.def dataChanged(self, index1, index2): pass Signal emitted when data changes in the model.def layoutChanged(self): pass Signal emitted when the layout changes in the model.def rowsMoved(self, parent, startIndex, endIndex, newParent, newStart): pass Signal emitted when rows are moved in the model. def columnMoved(self, originalColumn, newColumn): pass Signal emitted when columns are moved in the model.。

eclipse table标签的用法

eclipse table标签的用法

eclipse table标签的用法Eclipse Table标签用于在Eclipse插件的用户界面中创建表格视图。

以下是其使用方法:1. 首先,在插件的扩展定义中创建一个新的Table Viewer。

```java<extensionpoint="org.eclipse.ui.views"><viewclass="com.example.MyTableView"id="com.example.myTableView"name="My Table View"></view></extension>```2. 在插件中创建TableViewer类,并继承自org.eclipse.jface.viewers.TableViewer,实现表格视图的自定义逻辑。

```javaimport org.eclipse.jface.viewers.TableViewer;import org.eclipse.swt.SWT;import posite;public class MyTableView extends TableViewer {public MyTableView(Composite parent) {super(parent, SWT.MULTI | SWT.H_SCROLL |SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);// 设置表格列createColumns();// 设置表格布局getTable().setLinesVisible(true);getTable().setHeaderVisible(true);// 设置表格内容提供者setContentProvider(new MyTableContentProvider());// 设置表格标签提供者setLabelProvider(new MyTableLabelProvider());}private void createColumns() {// 创建表格列,设置宽度、排序等属性// 例如:TableColumn column = new TableColumn(getTable(), SWT.NONE);column.setWidth(100);column.setText("Column 1");column.setMoveable(true);column.setResizable(true);}}```3. 创建内容提供者类和标签提供者类,用于提供表格的内容和标签显示。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

J a v a F X2.0表格框T a b l e V i e w-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KIIJavaFX SDK API在的好几个类都被设计来以表格形式呈现数据。

在 JavaFX应用中创建表格的最重要类是TableView, TableColumn , 和TableCell 。

可以通过实现数据模型或者应用一个细胞工厂来产生表格。

表格的类提供了内置的功能来在必要的时候进行数据排序和重置大小。

Figure 13-1是一个典型的表格,用来呈现地址簿中的联系人信息。

Figure 13-1 Table SampleDescription of "Figure 13-1 Table Sample"创建TableExample 13-1中的代码块创建了一个空表格,它带有3列。

然后被加入了应用的场景中。

Example 13-1 Adding a Tableimport javafx.application.Application; import javafx.geometry.Insets; import javafx.scene.Group; import javafx.scene.Scene; import bel; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import yout.VBox; import javafx.scene.text.Font; import javafx.stage.Stage; public class Main extends Application { private TableView table = new TableView(); public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) { Scene scene = newScene(new Group()); stage.setTitle("Table View Sample"); stage.setWidth(400); stage.setHeight(500); final Label label = new Label("Address Book"); label.setFont(new Font("Arial", 20)); TableColumn firstNameCol = new TableColumn("First Name"); TableColumn lastNameCol = new TableColumn("Last Name"); TableColumn emailCol = new TableColumn("Email"); table.getColumns().addAll(firstNameCol, lastNameCol, emailCol); final VBox vbox = new VBox(); vbox.setSpacing(5); vbox.getChildren().addAll(label, table); vbox.setPadding(new Insets(10, 0, 0, 10)); ((Group) scene.getRoot()).getChildren().addAll(vbox); stage.setScene(scene); stage.show(); } }表格控件是通过实例化TableView 类创建的。

在Example 13-1中,它被加入到了VBox 布局容器中,然而,你可以直接把它加入应用场景中。

Example 13-1定义了三列来存储地址簿中的以下信息:某个联系人的名和姓还有电邮地址。

列是用TableColumn 类创建的。

TableView 类的getColumns 方法把前面创建的列加入到表格中。

在应用中,可以用这个方法动态的添加和移除列。

编译运行的效果如下Figure 13-2 .Figure 13-2 Table Without DataDescription of "Figure 13-2 Table Without Data"可以通过调用setVisible方法来管理列的可视性。

比如说,你应用的逻辑要求隐藏用户电邮地址,可以这样达到目的:emailCol.setVisible(false) .如果数据要求更复杂的数据呈现结构,可以创建内嵌的列。

比如,如果地址簿中的联系人有两个email账户,就需要两列来展示首选和次要地址了。

创建两个子列,然后在emailCol上调用getColumns方法,见Example 13-2 .Example 13-2 Creating Nested ColumnsTableColumn firstEmailCol = new TableColumn("Primary"); TableColumn secondEmailCol = new TableColumn("Secondary");emailCol.getColumns().addAll(firstEmailCol, secondEmailCol);把这些代码加入到Example 13-1 , 然后编译运行,表格的呈现效果如Figure 13-3 .Figure 13-3 Table with Nested ColumnsDescription of "Figure 13-3 Table with Nested Columns"尽管表格被加入到了应用中,标准标题依然显示的是"No content in table" 因为没定义数据。

为了不显示这个标题,可以使用setPlaceholder方法指定一个Node对象来显示在空表格中。

定义Data Model当在JavaFX应用中创建表格时,最佳实践是实现一个定义了数据模型、提供了方法和字段的类来扩展表格的工作。

Example 13-3创建了一个Person类来定义地址簿中的数据。

Example 13-3 Creating the Person Classpublic static class Person { private final SimpleStringProperty firstName; private final SimpleStringProperty lastName; private final SimpleStringProperty email; private Person(String fName, String lName,String email) { this.firstName = new SimpleStringProperty(fName);stName = new SimpleStringProperty(lName); this.email = new SimpleStringProperty(email); } public String getFirstName() { return firstName.get(); } public void setFirstName(String fName){ firstName.set(fName); } public String getLastName() { returnlastName.get(); } public void setLastName(String fName){ lastName.set(fName); } public String getEmail() { return email.get(); } public void setEmail(String fName) { email.set(fName); } }firstName , lastName , 和email字符串属性(string property)是创建来引用特定的数据元素的。

另外,get和set方法是提供给每个数据元素的。

这样,比如说,getFirstName方法返回了firstName属性的值,而setFirstName方法为这个属性指定了值。

当数据模型在Person类中形成时,可以创建一个ObservableList数组来定义足够多的行来在表格中显示你的数据。

看Example 13-4中的代码。

Example 13-4 Defining Table Data in an Observable Listfinal ObservableList<Person> data = FXCollections.observableArrayList( new Person("Jacob", "Smith", "jacob.smith@"), new Person("Isabella", "Johnson", "isabella.johnson@"), new Person("Ethan", "Williams", "ethan.williams@"), new Person("Emma", "Jones","emma.jones@"), new Person("Michael", "Brown","michael.brown@") );下一步是将数据和表格列相关联。

可以通过为每个数据元素定义的属性来实现,见Example 13-5 . Example 13-5 Setting Data Properties to ColumnsfirstNameCol.setCellValueFactory( newPropertyValueFactory<Person,String>("firstName") );lastNameCol.setCellValueFactory( newPropertyValueFactory<Person,String>("lastName") );emailCol.setCellValueFactory( newPropertyValueFactory<Person,String>("email") );setCellValueFactory方法为每列指定了一个细胞工厂。

相关文档
最新文档