javafx20表格框tableview.docx
- 文档编号:23579295
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:13
- 大小:179.89KB
javafx20表格框tableview.docx
《javafx20表格框tableview.docx》由会员分享,可在线阅读,更多相关《javafx20表格框tableview.docx(13页珍藏版)》请在冰豆网上搜索。
javafx20表格框tableview
JavaFXSDKAPI在的好几个类都被设计来以表格形式呈现数据。
在JavaFX应用中创建表格的最重要类是TableView, TableColumn , 和TableCell 。
可以通过实现数据模型或者应用一个细胞工厂来产生表格。
表格的类提供了内置的功能来在必要的时候进行数据排序和重置大小。
Figure13-1 是一个典型的表格,用来呈现地址簿中的联系人信息。
Figure13-1TableSample
Descriptionof"Figure13-1TableSample"
创建Table
Example13-1 中的代码块创建了一个空表格,它带有3列。
然后被加入了应用的场景中。
Example13-1AddingaTable
importimportimportimportimportimportimportimportimportimportpublicclassMainextendsApplication{privateTableViewtable=newTableView();publicstaticvoidmain(String[]args){launch(args);}@Overridepublicvoidstart(Stagestage){Scenescene=newScene(newGroup());("TableViewSample");(400);(500);finalLabellabel=newLabel("AddressBook");(newFont("Arial",20));TableColumnfirstNameCol=newTableColumn("FirstName");TableColumnlastNameCol=newTableColumn("LastName");TableColumnemailCol=newTableColumn("Email");().addAll(firstNameCol,lastNameCol,emailCol);finalVBoxvbox=newVBox();(5);().addAll(label,table);(newInsets(10,0,0,10));((Group)()).getChildren().addAll(vbox);(scene);();}}
表格控件是通过实例化TableView 类创建的。
在 Example13-1 中,它被加入到了VBox 布局容器中,然而,你可以直接把它加入应用场景中。
Example13-1 定义了三列来存储地址簿中的以下信息:
某个联系人的名和姓还有电邮地址。
列是用TableColumn 类创建的。
TableView 类的getColumns 方法把前面创建的列加入到表格中。
在应用中,可以用这个方法动态的添加和移除列。
编译运行的效果如下Figure13-2 .
Figure13-2TableWithoutData
Descriptionof"Figure13-2TableWithoutData"
可以通过调用setVisible 方法来管理列的可视性。
比如说,你应用的逻辑要求隐藏用户电邮地址,可以这样达到目的:
(false) .
如果数据要求更复杂的数据呈现结构,可以创建内嵌的列。
比如,如果地址簿中的联系人有两个email账户,就需要两列来展示首选和次要地址了。
创建两个子列,然后在emailCol 上调用getColumns 方法,见 Example13-2 .
Example13-2CreatingNestedColumns
TableColumnfirstEmailCol=newTableColumn("Primary");TableColumnsecondEmailCol=newTableColumn("Secondary");().addAll(firstEmailCol,secondEmailCol);
把这些代码加入到 Example13-1 ,然后编译运行,表格的呈现效果如 Figure13-3 .
Figure13-3TablewithNestedColumns
Descriptionof"Figure13-3TablewithNestedColumns"
尽管表格被加入到了应用中,标准标题依然显示的是"Nocontentintable"因为没定义数据。
为了不显示这个标题,可以使用setPlaceholder方法指定一个 Node 对象来显示在空表格中。
定义DataModel
当在JavaFX应用中创建表格时,最佳实践是实现一个定义了数据模型、提供了方法和字段的类来扩展表格的工作。
Example13-3 创建了一个Person类来定义地址簿中的数据。
Example13-3CreatingthePersonClass
publicstaticclassPerson{privatefinalSimpleStringPropertyfirstName;privatefinalSimpleStringPropertylastName;privatefinalSimpleStringPropertyemail;privatePerson(StringfName,StringlName,Stringemail){=newSimpleStringProperty(fName);=newSimpleStringProperty(lName);=newSimpleStringProperty(email);}publicStringgetFirstName(){return();}publicvoidsetFirstName(StringfName){(fName);}publicStringgetLastName(){return();}publicvoidsetLastName(StringfName){(fName);}publicStringgetEmail(){return();}publicvoidsetEmail(StringfName){(fName);}}
firstName , lastName , 和email 字符串属性(stringproperty)是创建来引用特定的数据元素的。
另外, get和 set方法是提供给每个数据元素的。
这样,比如说, getFirstName方法返回了firstName属性的值,而 setFirstName 方法为这个属性指定了值。
当数据模型在 Person 类中形成时,可以创建一个ObservableList 数组来定义足够多的行来在表格中显示你的数据。
看Example13-4 中的代码。
Example13-4DefiningTableDatainanObservableList
finalObservableList
下一步是将数据和表格列相关联。
可以通过为每个数据元素定义的属性来实现,见Example13-5 .
Example13-5SettingDataPropertiestoColumns
(newPropertyValueFactory
setCellValueFactory 方法为每列指定了一个细胞工厂。
细胞工厂是通过使用PropertyValueFactory 类来实现的,该类使用了表格列的firstName , lastName 和email 属性来引用Person相应的方法。
定义了数据模型、加入数据并和列相关联后可以把数据加入表格了。
使用TableView 类的setItems 方法:
(data) .
由于ObservableList对象可以跟踪元素的任何改变, TableView的内容在数据改变后是自动更新的。
查看 Example13-6 中的代码。
Example13-6CreatingaTableandAddingDatatoIt
importimportimportimportimportimportimportimportimportimportimportimportimportimportpublicclassMainextendsApplication{publicstaticclassPerson{privatefinalSimpleStringPropertyfirstName;privatefinalSimpleStringPropertylastName;privatefinalSimpleStringPropertyemail;privatePerson(StringfName,StringlName,Stringemail){=newSimpleStringProperty(fName);=newSimpleStringProperty(lName);=newSimpleStringProperty(email);}publicStringgetFirstName(){return();}publicvoidsetFirstName(StringfName){(fName);}publicStringgetLastName(){return();}publicvoidsetLastName(StringfName){(fName);}publicStringgetEmail(){return();}publicvoidsetEmail(StringfName){(fName);}}privateTableView
编译运行的效果如图 Figure13-4 所示。
Figure13-4TablePopulatedwithData
Descriptionof"Figure13-4TablePopulatedwithData"
新增行
Figure13-4 中的表格包含了5行,目前还无法更改。
可以使用文本框来输入FirstName,LastName和Email列中的内容。
TextField控件使你的应用能够接收用户的输入。
Example13-7创建了三个文本框并分别定义了提示语,还创建了一个Add按钮。
Example13-7UsingTextFieldstoEnterNewItemsintheTable
finalTextFieldaddFirstName=newTextField();("LastName");());finalTextFieldaddLastName=newTextField();());("LastName");finalTextFieldaddEmail=newTextField();());("Email");finalButtonaddButton=newButton("Add");(newEventHandler
点击Add按钮后,文本框中的值就包含进一个Person 的构造方法并加入到data可见列表( observablelist)中。
这样 ,新输入的联系人信息就显示在表格中了。
查看 Example13-8 中的代码。
Example13-8TablewiththeTextFieldstoEnterNewItems
importimportimportimportimportimportimportimportimportimportimportimportimportimportimportimportimportimportimportimportpublicclassMainextendsApplication{publicstaticclassPerson{privatefinalStringPropertyfirstName;privatefinalStringPropertylastName;privatefinalStringPropertyemail;privatePerson(StringfName,StringlName,Stringemail){=newSimpleStringProperty(fName);=newSimpleStringProperty(lName);=newSimpleStringProperty(email);}publicStringgetFirstName(){return();}publicvoidsetFirstName(StringfName){(fName);}publicStringgetLastName(){return();}publicvoidsetLastName(StringfName){(fName);}publicStringgetEmail(){return();}publicvoidsetEmail(StringfName){(fName);}}privateTableView
应用并没有提供任何过滤器来检查输入(比如输入的电邮地址并不符合正确形式)。
你可以在开发的时候自己加上这些功能。
当前应用也不能检查十分输入了空值。
如果没输入内容,点击Add按钮会加入空行。
Figure13-5 演示了用户如何新增行。
Figure13-5AddingContactInformationtotheAddressBook
Descriptionof"Figure13-5AddingContactInformationtotheAddressBook"
Figure13-6 是上图点击Add按钮后的效果。
联系人EmmaWhite的信息现在在表格中显示了。
Figure13-6NewlyAddedEntry
Descriptionof"Figure13-6NewlyAddedEntry"
数据排序
TableView 类提供了内置的数据排序能力。
。
用户可以点击列标题来改变数据顺序。
点击一次是递增排序,点击两次是递减排序,点击三次是不能排序。
默认地,是没有排序。
用户可以万恶表格中的多个列进行排序,并在排序操作中指定各列的优先级。
要排序多列,在点击列标题的时候按住Shift键即可。
在Figure13-7 中,第一列应用了升序,第二列是降序。
注意第一列的优先级要高于第二列。
Figure13-7SortingMultipleColumns
Descriptionof"Figure13-7SortingMultipleColumns"
作为开发者,可以通过 setSortType方法为应用中的每一列设置排序参数。
可以指定是升序还是降序。
比如,下面这行代码设置了emailCol列是降序排序:
可以通过从 可见列表增加或删除TableColumn实例来指定要排序哪些列。
该列表中列的顺序就是排序的优先级 (比如,0项目的优先级高于第一个项目。
)
使用setSortable(false)方法可以阻止列的排序。
编辑Table中的数据
TableView类不仅显示表格数据,也提供了编辑数据的功能。
可以使用(introw,TableColumn
column) 方法开始编辑。
也可以使用T
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- javafx20 表格 tableview