Module  javafx.controls

Class TextFieldListCell<T>

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


    public class TextFieldListCell<T>
    extends ListCell<T>
    一个包含ListCell实现的类,在单元格内绘制一个TextField节点。

    默认情况下,TextFieldListCell在不被编辑时被渲染为Label ,在编辑模式时作为TextField呈现。 默认情况下,TextField将拉伸以填充整个列表单元格。

    从以下版本开始:
    JavaFX 2.2
    • 构造方法详细信息

      • TextFieldListCell

        public TextFieldListCell​()
        使用零转换器创建默认的TextFieldListCell。 没有指定一个270687394661414 ,这个单元格将无法接受TextField的输入(因为它不知道如何将它转换回该域对象)。 因此,强烈建议不要使用此构造函数,除非您打算单独设置转换器。
      • TextFieldListCell

        public TextFieldListCell​(StringConverter<T> converter)
        创建一个TextFieldListCell,它在编辑模式时提供TextField ,允许编辑单元格内容。 此方法将适用于任何ListView实例,无论其泛型类型如何。 然而,为了实现这一点,必须提供一个StringConverter ,它将把给定的String(从用户输入的字符串)转换为类型T的一个实例。然后这个项目将被传递给ListView.onEditCommitProperty()回调。
        参数
        converter - A converter可以将给定的String(从用户输入的字符串)转换为类型T的实例。
    • 方法详细信息

      • forListView

        public static <T> Callback<ListView<T>,ListCell<T>> forListView​(StringConverter<T> converter)
        提供TextField ,使单元格内容的编辑在小区双击,或者当ListView.edit(int)被调用。 此方法将适用于任何ListView实例,无论其泛型类型如何。 但是,为了实现这一点,必须提供一个StringConverter ,它将把给定的字符串(从用户输入的字符串)转换为类型T的实例。然后将该项目传递给ListView.onEditCommitProperty()回调。
        参数类型
        T - 单元格中包含的项目的类型
        参数
        converter - A StringConverter可以将给定的String(从用户输入的字符串)转换为类型T的实例。
        结果
        A Callback可以插入到ListView的cell factory property中,可以对内容进行文本编辑。
      • startEdit

        public void startEdit​()
        调用此功能从非编辑状态转换到编辑状态,如果单元格是可编辑的。 如果这个单元格已经处于编辑状态,它将保留在它中。
        重写:
        startEdit ListCell<T>
      • cancelEdit

        public void cancelEdit​()
        调用此功能从编辑状态转换为非编辑状态,而不保存任何用户输入。
        重写:
        cancelEditListCell<T>
      • 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 - 该单元格是否表示列表中的数据。 如果它是空的,那么它不表示任何域数据,而是用于呈现“空”行的单元格。