-
实用
JavaFX SDK
API
在的好几个类都被设计来以表格形式呈现数据。在
p>
JavaFX
应用中创建表格的最重要类是
TableView, TableColumn ,
和
TableCell
。可以通过实现数据模型或者应用一个细胞工厂来产生表格。
表格的类提供了置的功能来在必要的时候进行数据排序和重置大小。
Figure 13-1
是一个典型的表格,用来呈现地址簿中的联系人信息。
Figure 13-1 Table Sample
Description of
创建
Table
Example 13-1
中的代码
块创建了一个空表格,它带有
3
列。然后被加入了应用的场景中
。
Example 13-1
Adding a Table
import ation; import
import import
; import import
olumn; import
iew; import import
import
; 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 = new
文档
实用
Scene(new Group()); le(
label
= new
Label(
TableColumn(
emailCol =
new TableColumn(
VBox vbox = new VBox();
cing(5); ldren().addAll(label, table); ding(new
Insets(10, 0, 0, 10)); ((Group)
t()).getChildren().addAll(vbox); ne(scene);
(); } }
表格控件是通过实例化
TableView
类创建的。在
Example
13-1
中,它被加入到了
VBox
布局容器中,然而,
你可以直接把它加入应用场景中。
Example 13-1
定义了三列来存储地址簿中的以下信息:某个联系人的名和姓还有电邮地址。列是用
TableColumn
类创建的。
TableView
类的
getColumns
方法把前
面创建的列加入到表格中。在应用中,可以用这个方法动态的添加和
移除列。
编译运行的效果如下
Figure
13-2
.
Figure 13-2 Table
Without Data
Description of
文档
实用
可以通过调用
setVisible
方法来管理列的可视性。比如说,
你应用的逻辑要求隐藏用户电邮地址,
可以这样
达到目的:
ible(false) .
如果数据要求更复杂的数据呈现结构,可以创建嵌的列。
p>
比如,如果地址簿中的联系人有两个
email
账户,就需要两列来展示首选和次要地址了。创建两个子列,
然后在
emailCol
上调用
getColumns
方法,见
Example
13-2
.
Example 13-2 Creating
Nested Columns
TableColumn
firstEmailCol = new TableColumn(
TableCo
lumn(
把这些代码加入到
Example 13-1
,
然后编译运行,表格的呈现效果如
Figure 13-3
.
Figure 13-3 Table with Nested Columns
Description of
尽管表格被加入到了应用中,标准标题依然显示的是
因为没定义数据。为了不显示这
个标题,可以使用
setPlaceholder
方法指定一个
Node
对象来显示在空表格中。
定义
Data Model
当在
p>
JavaFX
应用中创建表格时,
最佳实践
是实现一个定义了数据模型、
提供了方法和字段的类来扩展表格
的工作。
Example 13-3
创建了一个
Person
类来定义地址簿中的数据。
Example 13-3 Creating the Person
Class
文档
实用
public static
class Person { private final SimpleStringProperty
firstName; private final SimpleStringProperty
lastName; private final
SimpleStringProperty email; private Person(String
fName, String lName, String email)
{
ame = new SimpleStringProperty(fName); me = new
SimpleStringProperty(lName);
= new
SimpleStringProperty(email); } public String
getFirstName() { return (); } public
void setFirstName(String fName) {
(fName); } public String getLastName() { return
(); }
public void setLastName(String
fName) { (fName); } public String getEmail() {
return (); }
public void
setEmail(String fName) { (fName); } }
firstName , lastName ,
和
email
字符串属性(
string
property
)是创建来引用特定的数据元素的。
另外,
get
和
set
方法是提供给每个数据元素的。这样,比如说,
get
FirstName
方法返回了
firstName
属性的
值,而
setFirstName
方法为这个属性指定了值。
当数据模型在
Person
类中形成时,可以创建一个
ObservableList <
/p>
数组来定义足够多的行来在表格中显示你
的数据。看
Example 13-4
中的代码。
Example 13-4 Defining Table Data in an
Observable List
final
ObservableList
Person(
下一步是将数据和表格列相关联。可以通过为每个数据元素定义的属
性来实现,见
Example 13-5
.
Example 13-5 Setting Data Properties to
Columns
lValueFactory( new PropertyValu
eFactory
lValueFactory(
new PropertyValueFactory
lValueFactory( new PropertyValueFactory
setCellValueFactory
方法
为每列指定了一个细胞工厂。细胞工厂是通过使用
PropertyValueFact
ory
类来实现
的,该类使用了表格列的
firstName , lastName
和
email
属性来引用
Person
相应的方法。
定义了数据模型、加入数据并和列相关联后可以把数据加入表格了。使用
Table
View
类的
setItems
方法:
ms(data) .
由于<
/p>
ObservableList
对象可以跟踪元素的任何改变,<
/p>
TableView
的容在数据改变后是自动更新的。
查看
Example
13-6
中的代码。
Example 13-6 Creating a Table and
Adding Data to It
import
StringProperty; import tyValueFactory; import
ation; import ections; import ableList;
import import import import
; import olumn; import iew;
import import import public class
Main
extends Application { public
static class Person { private final
SimpleStringProperty firstName; private final
SimpleStringProperty lastName; private
final SimpleStringProperty email; private
Person(String fName, String
lName,
String email) { ame = new
SimpleStringProperty(fName); me = new
SimpleStringProperty(lName); = new
SimpleStringProperty(email); } public String
getFirstName()
{ return (); } public
void setFirstName(String fName) { (fName); }
public String
getLastName() { return
(); } public void setLastName(String fName) {
(fName); } public
文档
实用
String
getEmail() { return (); } public void
setEmail(String fName) { (fName); } } private
TableView
ableArrayList( new Person(
p>
Person(
public static void
main(String[] args) { launch(args); } Override
public void start(Stage stage) { Scene scene = new
Scene(new Group()); le(
label
= new Label(
TableColumn(
Prop
ertyValueFactory
Name
TableColumn emailCol = new
TableColumn(
lValueFactory( new Property
ValueFactory
umns().addA
ll(firstNameCol, lastNameCol, emailCol); final
VBox vbox = new VBox();
cing(5);
ldren().addAll(label, table); ding(new Insets(10,
0, 0, 10)); ((Group)
t()).getChildren().addAll(vbox);
ne(scene); (); } }
编译运行的效果如图
Figure 13-4
所示。
Figure 13-4
Table Populated with Data
文档
实用
Description of
新增行
Figure 13-4
中的表格包
含了
5
行,目前还无法更改。
可以使用文本框来输入
First Name, Last
Name
和
Email
列中的容。
Text Field
控件
使你的应用能够接收用户
的输入。
Example 13-7<
/p>
创建了三个文本框并分别定义了提示语,还创建了一个
Add
p>
按钮。
Example 13-7 Using Text Fields to Enter
New Items in the Table
final TextField
addFirstName = new TextField();
mptText(
Width(fWidth()); final
TextField addLastName = new TextField();
Width(fWidth());
mptText(
TextField addEmail = new
TextField(); Width(fWidth());
mptText(<
/p>
EventHandler
Person( t(), t(), t() ));
t(
t(
文档
-
-
-
-
-
-
-
-
-
上一篇:(完整)仁爱英语七年级试题
下一篇:七年级英语质量检测试题带答案