DOC-03-12 列表视图(List View)

在本章中,你将会学习如何创建列表。

ListView类用于展示一个可滚动的列表。图12-1展示了一个酒店预定系统中的可选房型列表。

12-1 简单的列表视图

3-12-1 list-default

你可以通过setItems方法来填充列表的内容。你也可以通过setCellFactory方法来为列表中的选项创建一个视图。

创建一个List View

例12-1中的代码片段实现了如图12-1中展示的带有String内容项的列表。

12-1 创建一个List View控件

如果要改变list view控件的宽度和高度,可以使用setPrefHeight和setPrefWidth方法。在例12-2中将纵向列表的高度限制为100像素、宽度限制为70像素,对应的结果如图12-2所示。

12–2 设置List View的宽度和高度

12-2 改变了大小的纵向列表

3-12-2 list-vert

通过将orientation属性的值设置为Orientation.HORIZONTAL,你可以将列表改成横向排布。代码如下:

如果将图12-1中的列表横向排列,其效果如图12-3所示。

12-3 横向排列的List View控件

3-12-3 list-horizontal

你可以通过SelectionModel和FocusModel类来随时跟踪ListView对象中被选择和获得焦点的选项。为了取得各个列表项的当前状态,可以通过使用下面的方法组合:

    · getSelectionModel().getSelectedIndex()

        –返回在单选(single-selection)模式下当前被选中的列表项索引号。

    · getSelectionModel().getSelectedItem()

        – 返回当前被选中的列表项。

    · getFocusModel().getFocusedIndex()

        –返回当前获得焦点的列表项索引号。

    · getFocusModel().getFocusedItem()

        –返回当前获得焦点的列表项。

在实例化ListView时默认使用的SelectionModel是MultiSelectionModel抽象类的一个实现。不过selectionMode属性的默认值是SelectionMode.SINGLE。对于默认的ListView实例,如果要启用多选,则可以使用下面的样例代码:

同时要注意MultipleSelectionModel具有selectedItems和selectedIndices属性,它们都是可观察的列表(observable list),可以被监听以检测多选情况。

使用数据来填充List View

例12-1展示了填充list view 的最简单方法。为了加强列表的功能,你可以通过使用ListCell类的特定扩展类来向列表中添加各种类型的数据,例如CheckBoxListCell,ChoiceBoxListCell,ComboBoxListCell和TextFieldListCell。这些类为基本的列表单元(List Cell)增加了附加功能,实现这些类的Cell Factory使得开发者可以直接改变List View中的数据。

例如,默认情况下列表单元是不可编辑的,然而ComboBoxListCell类会在列表单元中绘制一个组合框(Combo Box)。这个改变允许用户可以构建一个名称列表,并可以通过一个组合框来选择对应的值,代码如例12-3所示。

12–3 List View中增加ComboBoxListCell Items

 

样例中加粗的代码行调用了setCellFactory方法来重新定义列表单元的实现类。当你编译并运行该样例时,它会产生如图12-4所示的窗口。

12–4 带有Combo Box列表单元的List View

3-12-4 list-combobox

Cell Factory机制不仅可以重新实现列表的单元,它还可以帮助你完全自定义列表单元的外观。

自定义List View的内容

根据下面的程序来学习如何使用Cell Factory来产生列表项。例12-4中展示的程序创建了一个彩色列表。

12–4 创建一个Cell Factory