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

Cell Factory产生ListCell对象。每个Cell与一个单独的数据项(Data Item)关联,并且会展示List View中的一行。通过setGraphic方法展现的Cell内容可以是其它的控件,文本、形状或图片。在本例中,List Cell展现了矩形。

编译并运行程序会产生如图12-5所示的窗体。

12–5 彩色列表

3-12-5 list-colors

你可以滚动这个列表,选中或者取消选中其中的任意项。你也可以参考下一节的内容来扩展此应用程序,使其能设置文本标签的颜色。

处理对列表项(List Item)的选中事件

按例12-5来修改样例代码,使其可以处理指定列表项被选中时触发的事件。

12–5 处理 List Item的事件

 

在selectedItemProperty上调用addListener方法创建了一个新的监听器来处理被选中项的改变。例如:如果深紫色项被选中,则label会获得“darkorchid”标题并且会填充成对应的颜色。被修改后程序会输出如图12-6所示的界面。

12–6 选择一个深紫色的列表项

3-12-6 list-color-label

相关的API文档

    · ListView

    · ListCell

    · ComboBoxListCell

    · 自定义控件(Customization of UI Controls

     

打赏一下
支付宝
微信
除非注明,博客文章均为原创,转载请标明文章地址
本文地址: http://www.javafxchina.net/blog/2015/04/doc03_list-view/
百度已收录