Module  javafx.controls

Class CheckBoxListCell<T>

  • 参数类型
    T - ListView中包含的元素的类型。
    All Implemented Interfaces:
    StyleableEventTargetSkinnable


    public class CheckBoxListCell<T>
    extends ListCell<T>
    一个包含一个ListCell实现的类,它在单元格中绘制一个CheckBox节点,可选地带有一个标签来指示复选框代表什么。

    CheckBoxListCell使用ListView左侧的CheckBox进行呈现,并且与列表项相关的文本占用所有剩余的水平空间。

    要构造这个类的实例,有必要提供一个Callback ,给定一个类型T的对象将返回一个ObservableValue<Boolean> ,表示给定的项是否被选择。 这个ObservableValue将双向绑定(这意味着单元格中的复选框将基于用户交互设置/取消设置此属性,而复选框将反映ObservableValue<Boolean>的状态,如果外部更改)。

    请注意,CheckBoxListCell渲染CheckBox“live”,这意味着CheckBox始终是交互式的,可以直接由用户切换。 这意味着单元格不需要输入其editing state (通常由用户双击单元格)。 这方面的一个副作用是,通常的编辑回调(如on edit commit )将被调用。 如果要通知更改,建议直接观察CheckBox操作的布尔属性。

    从以下版本开始:
    JavaFX 2.2
    另请参见:
    CheckBoxListCell
    • 构造方法详细信息

      • CheckBoxListCell

        public CheckBoxListCell​()
        创建一个默认的CheckBoxListCell。
      • CheckBoxListCell

        public CheckBoxListCell​(Callback<T,ObservableValue<Boolean>> getSelectedProperty)
        创建一个默认的CheckBoxListCell。
        参数
        getSelectedProperty - A Callback将从ListView中返回一个ObservableValue<Boolean>给定一个项目。
      • CheckBoxListCell

        public CheckBoxListCell​(Callback<T,ObservableValue<Boolean>> getSelectedProperty,
                                StringConverter<T> converter)
        用自定义字符串转换器创建一个CheckBoxListCell。
        参数
        getSelectedProperty - A Callback ,将从ListView中返回一个ObservableValue<Boolean>项目。
        converter - 给定类型为T的对象的StringConverter将返回一个可以用于可视化表示对象的字符串。
    • 方法详细信息

      • forListView

        public static <T> Callback<ListView<T>,ListCell<T>> forListView​(Callback<T,ObservableValue<Boolean>> getSelectedProperty)
        创建用于ListView控件的单元格工厂。 当在ListView中使用时, CheckBoxListCell将使用ListView左侧的“复选框”进行呈现,与列表项相关的文本占用所有剩余的水平空间。
        参数类型
        T - ListView中包含的元素的类型。
        参数
        getSelectedProperty - A Callback ,给定类型T(这是从ListView<T>.items列表中取出的值)的对象将返回表示给定项目是否被选择的ObservableValue<Boolean> 这个ObservableValue将双向绑定(这意味着单元格中的CheckBox将根据用户交互设置/取消设置此属性,如果外部改变,CheckBox将反映ObservableValue的状态)。
        结果
        A Callback将返回能够处理ListView项目列表中包含的元素类型的ListCell。
      • forListView

        public static <T> Callback<ListView<T>,ListCell<T>> forListView​(Callback<T,ObservableValue<Boolean>> getSelectedProperty,
                                                                        StringConverter<T> converter)
        创建用于ListView控件的单元格工厂。 当在ListView中使用时, CheckBoxListCell将使用ListView左侧的复选框进行渲染,其中与列表项相关的文本占用所有剩余的水平空间。
        参数类型
        T - ListView中包含的元素的类型。
        参数
        getSelectedProperty - A Callback ,给定一个类型T(这是从ListView<T>.items列表中取出的值)的对象,将返回一个表示给定项目是否被选择的ObservableValue<Boolean> 这个ObservableValue将双向绑定(这意味着单元格中的CheckBox将根据用户交互设置/取消设置此属性,如果外部改变,CheckBox将反映ObservableValue的状态)。
        converter - 提供类型为T的对象的StringConverter将返回一个可以用于可视化表示对象的字符串。
        结果
        A Callback将返回能够处理ListView中包含的元素类型的ListCell。
      • updateItem

        public void updateItem​(T item,
                               boolean empty)
        updateItem方法不应该被开发人员调用,但它是开发人员覆盖的最佳方式,以允许它们自定义单元格的视觉效果。 为了澄清,开发人员不应该在他们的代码中调用这个方法(他们应该留给UI控件,如ListView控件)来调用这个方法。 但是,使用updateItem方法的目的是使开发人员在指定自定义单元工厂时(再次像ListView cell factory ),可以覆盖updateItem方法以允许对单元格进行完全自定义。

        非常重要的是,Cell的子类会正确覆盖updateItem方法,因为这样做会导致诸如空白单元格或其中出现意外内容的单元格等问题。 以下是如何正确覆盖updateItem方法的示例:

          protected void updateItem(T item, boolean empty) {
             super.updateItem(item, empty);
        
             if (empty || item == null) {
                 setText(null);
                 setGraphic(null);
             } else {
                 setText(item.toString());
             }
         } 

        注意在这段代码示例中的两个重点:

        1. 我们称之为super.updateItem(T,boolean)方法。 如果没有这样做,项目和空属性设置不正确,您可能会遇到图形问题。
        2. 我们测试empty条件,如果为true,我们将文本和图形属性设置为null。 如果我们不这样做,几乎可以保证最终用户意外地看到细胞中的图形工件。
        重写:
        updateItemCell<T>
        参数
        item - 单元格的新项目。
        empty - 该单元格是否表示列表中的数据。 如果它是空的,那么它不表示任何域数据,而是用于呈现“空”行的单元格。