Spec-Zone.ru › OpenJavaFX 8
javafx.scene.control

Класс Cell<T>

java.lang.Object
  • javafx.scene.Node
    • javafx.scene.Parent
      • javafx.scene.layout.Region
        • javafx.scene.control.Control
          • javafx.scene.control.Labeled
            • javafx.scene.control.Cell<T>

Параметры типа:

T - Тип элемента, содержащегося в ячейке.

Все реализованные интерфейсы:

Styleable, EventTarget, Skinnable

Прямые известные подклассы:

DateCell, IndexedCell



public class Cell<T>
extends Labeled
API ячеек используется для виртуализированных элементов управления, таких как ListView, TreeView и TableView. Ячейка — это Labeled Control, используемая для отображения одной "строки" внутри ListView, TreeView или TableView. Ячейки также используются для каждой отдельной "ячейки" внутри TableView (т.е. для каждого пересечения строки и столбца). Подробности см. в JavaDoc для каждого элемента управления отдельно.

Каждая ячейка связана с одним элементом данных (представленным свойством item). Ячейка отвечает за отображение этого элемента и, при необходимости, за его редактирование. Элемент внутри ячейки может быть представлен текстом или другим элементом управления, таким как CheckBox, ChoiceBox или любым другим Node, например, HBox, GridPane или даже Rectangle.

Поскольку TreeView, ListView, TableView и другие подобные элементы управления могут потенциально использоваться для отображения огромного количества данных, создание фактической ячейки для каждого элемента в элементе управления нецелесообразно. Мы представляем очень большие наборы данных, используя лишь несколько ячеек. Каждая ячейка "переиспользуется". Это то, что мы имеем в виду, когда говорим, что эти элементы управления виртуализированы.

Поскольку Cell — это Control, он по сути является "моделью". Его Skin отвечает за определение внешнего вида и макета, а Behavior — за обработку всех событий ввода и использование этой информации для изменения состояния Control. Кроме того, ячейка стилизуется из CSS так же, как и любой другой Control. Однако для большинства случаев использования ячейки реализовывать Skin необязательно. Это связано с тем, что можно задать фабрику ячеек — это подробно описано ниже.

Поскольку наиболее распространённым случаем использования ячеек является отображение текста пользователю, этот случай специально оптимизирован внутри ячейки. Это делается путём расширения Cell от Labeled. Это означает, что подклассы Cell должны только устанавливать свойство text, а не создавать отдельный Label и устанавливать его внутри ячейки. Однако в ситуациях, когда требуется что-то большее, чем просто текст, можно поместить любой Node в свойство graphic ячейки. Несмотря на название, графикой может быть любой объект Node, и он будет полностью интерактивным. Например, ячейка списка может быть настроена с Button в качестве графики. Текст кнопки можно затем привязать к свойству item ячейки. Таким образом, всякий раз, когда элемент в ячейке изменяется, текст кнопки автоматически обновляется.

Cell устанавливает focusTraversable в false.

Фабрики ячеек

По умолчанию способ представления ячейки item зависит от реализации отображения в различных виртуализированных контейнерах. Например, ListView по умолчанию преобразует элемент в строку и вызывает Labeled.setText(java.lang.String) с этим значением. Если вы хотите специализировать ячейку, используемую для ListView (например), вам необходимо предоставить реализацию обратного вызова cellFactory, определённого в ListView. Аналогичный API существует для большинства элементов управления, использующих ячейки (например, TreeView, TableView, TableColumn и ListView).

Фабрика ячеек вызывается платформой всякий раз, когда она определяет, что требуется создать новую ячейку. Например, предположим, что ваш ListView имеет 10 миллионов элементов. Создание всех 10 миллионов ячеек было бы неприемлемо дорого. Поэтому реализация ListView skin может создать только достаточное количество ячеек для отображаемого пространства. Если ListView будет изменён в размерах, система определит, что необходимо создать дополнительные ячейки. В этом случае она вызовет обратный вызов cellFactory (если он предоставлен), чтобы создать реализацию Cell, которую следует использовать. Если фабрика ячеек не предоставлена, будет использоваться встроенная реализация по умолчанию.

Реализация фабрики ячеек отвечает не только за создание экземпляра Cell, но и за настройку этой ячейки таким образом, чтобы она реагировала на изменения в её состоянии. Например, если мне нужно создать пользовательскую ячейку, которая форматирует числа таким образом, чтобы они отображались как валюты, я могу сделать это так:

public class MoneyFormatCell extends ListCell<Number> {

     public MoneyFormatCell() {    }
       
     @Override protected void updateItem(Number item, boolean empty) {
         // calling super here is very important - don't skip this!
         super.updateItem(item, empty);
           
         // format the number as if it were a monetary value using the 
         // formatting relevant to the current locale. This would format
         // 43.68 as "$43.68", and -23.67 as "-$23.67"
         setText(item == null ? "" : NumberFormat.getCurrencyInstance().format(item));

         // change the text fill based on whether it is positive (green)
         // or negative (red). If the cell is selected, the text will 
         // always be white (so that it can be read against the blue 
         // background), and if the value is zero, we'll make it black.
         if (item != null) {
             double value = item.doubleValue();
             setTextFill(isSelected() ? Color.WHITE :
                 value == 0 ? Color.BLACK :
                 value < 0 ? Color.RED : Color.GREEN);
         }
     }
 }
Этот класс можно затем использовать внутри ListView так:
ObservableList<Number> money = ...;
 final ListView<Number> listView = new ListView<Number>(money);
 listView.setCellFactory(new Callback<ListView<Number>, ListCell<Number>>() {
     @Override public ListCell<Number> call(ListView<Number> list) {
         return new MoneyFormatCell();
     }
 });
В этом примере создаётся анонимный внутренний класс, который просто возвращает экземпляры MoneyFormatCell всякий раз, когда он вызывается. Класс MoneyFormatCell расширяет ListCell, переопределяя метод updateItem. Этот метод вызывается всякий раз, когда элемент в ячейке изменяется, например, когда пользователь прокручивает ListView или изменяется содержимое базовой модели данных (и ячейка повторно используется для представления другого элемента в ListView). Из-за этого нет необходимости управлять связями — просто реагируйте на изменения элементов, когда произойдёт этот метод. В приведённом выше примере всякий раз, когда элемент изменяется, мы обновляем свойство текста ячейки и также изменяем заполнение текста, чтобы гарантировать правильные визуальные эффекты. Кроме того, если ячейка "пустая" (т. е. используется для заполнения пространства в ListView, но не имеет связанных с ней данных), мы просто используем пустую строку.

Обратите внимание, что существуют дополнительные методы с префиксом «update», которые могут представлять интерес, поэтому обязательно внимательно изучите документацию API для Cell и подклассов Cell.

Конечно, мы также можем использовать API привязки вместо переопределения методов «update». Ниже приведён очень простой пример того, как это можно сделать.

public class BoundLabelCell extends ListCell<String> {

     public BoundLabelCell() {
         textProperty().bind(itemProperty());
     }
 }

Основные цели проектирования

  • Высокая эффективность во времени и памяти для больших наборов данных
  • Легкое создание и использование библиотек для пользовательских ячеек
  • Легкая настройка внешнего вида ячеек
  • Легкая настройка форматирования отображения (12.34 как $12.34 или 1234% и т. д.)
  • Легкое расширение для пользовательских визуальных эффектов
  • Легкое создание "панелей" данных для визуализации
  • Легкая анимация размера ячейки или других свойств

Основные сценарии использования

Ниже приведены несколько основных сценариев использования, используемых для проектирования API ячеек, а также примеры кода, демонстрирующие, как эти сценарии использования удовлетворяются этим API. Это ни в коем случае не является исчерпывающим списком поддерживаемых возможностей или функций, а скорее должно служить руководством по использованию API ячеек. Приведённые ниже примеры ориентированы на ListView, но та же философия применима к TreeCells или другим видам ячеек.

Изменение цветов ячейки

Это должно быть чрезвычайно просто в JavaFX. Каждая ячейка может быть стилизована непосредственно из CSS. Например, если вы хотите изменить стандартный фон каждой ячейки в ListView на WHITE, вы можете сделать следующее в CSS:

.list-cell {
   -fx-padding: 3 3 3 3;
   -fx-background-color: white;
 }
Если вы хотите установить цвет выделенных ячеек ListView в синий, вы можете добавить это в свой CSS-файл:
.list-cell:selected {
   -fx-background-color: blue;
 }
Большинство реализаций Cell расширяют IndexedCell, а не Cell. IndexedCell добавляет два других состояния псевдокласса: "нечётный" и "чётный". Используя это, вы можете получить чередование строк, сделав что-то вроде этого в своём CSS-файле:
.list-cell:odd {
   -fx-background-color: grey;
 }
Каждый из этих примеров не требует изменений кода. Просто обновите свой CSS-файл, чтобы изменить цвета. Вы также можете использовать псевдоклассы «hover» и другие в CSS так же, как и с другими элементами управления.

Другой подход к первому примеру выше (форматирование списка чисел) заключался бы в использовании стилей. Предположим, у вас есть ObservableList чисел для отображения в ListView и вы хотите окрасить все отрицательные значения в красный цвет, а все положительные или нулевые значения — в чёрный. Один из способов достижения этого — использовать пользовательскую фабрику ячеек, которая изменяет стиль ячейки в зависимости от того, является ли значение отрицательным или положительным. Это столь же просто, как добавить код для проверки, является ли число в ячейке отрицательным, и добавить стиль «отрицательный». Если число не отрицательное, строка «отрицательный» должна быть удалена. Этот подход позволяет определять цвета из CSS, что обеспечивает простое кастомизирование. CSS-файл тогда будет содержать что-то вроде следующего:

.list-cell {
   -fx-text-fill: black;
 }
 
 .list-cell .negative {
   -fx-text-fill: red;
 }

Редактирование

Большинство виртуализированных элементов управления, использующих архитектуру ячеек (например, ListView, TreeView, TableView и TreeTableView) поддерживают возможность редактирования значений непосредственно через ячейку. Вы можете узнать больше о контроллерах-специфичных деталях, перейдя в раздел «редактирование» в документации класса для элементов управления, перечисленных выше. Остальная часть этого раздела расскажет о некоторых деталях редактирования с ячейками.

Общий поток редактирования следующий (обратите внимание, что в этих шагах используется элемент управления ListView в качестве примера, но аналогичный API существует для всех упомянутых выше элементов управления, и процесс в целом одинаков):

  1. Пользователь запрашивает режим редактирования ячейки (через команды клавиатуры или мыши), или разработчик запрашивает, чтобы ячейка перешла в режим редактирования (вызвав метод, такой как метод ListView edit). Примечание: Если пользователь дважды щелкает или выполняет соответствующую команду клавиатуры для начала редактирования, он фактически вызывает соответствующий метод редактирования для управления (т.е. метод входа для редактирования, инициированного пользователем и разработчиком, одинаков).
  2. Каждая ячейка в видимой области управления уведомляется о том, что текущий editing cell изменился, и проверяет, является ли она сама собой. В этот момент может произойти одно из трех:
    1. Если индекс редактирования совпадает с индексом ячейки, на этой ячейке будет вызван startEdit(). Некоторые указания:
      1. Рекомендуется, чтобы подклассы Cell переопределяли метод startEdit() для обновления визуальных элементов ячейки при входе в режим редактирования. Однако важно, чтобы подклассы, переопределяющие метод startEdit(), продолжали вызывать super.startEdit(), чтобы родительские классы могли обновлять дополнительное состояние, необходимое для успешного редактирования.
      2. В методе startEdit() — идеальное время для изменения визуальных элементов ячейки. Например (и обратите внимание, что этот пример более подробно описан в javadoc для UI-контроллеров ListView и т.д.), вы можете установить Labeled.graphicProperty() ячейки на TextField и установить Labeled.textProperty() в null. Это позволит конечным пользователям вводить данные и вносить изменения в вашу модель данных.
      3. Когда пользователь завершит редактирование, ему нужно будет подтвердить или отменить изменения. Это ваша ответственность обрабатывать (например, установив, чтобы клавиша Enter вызывала commit the edit, а клавиша ESC вызывала cancel the edit). Вы делаете это, прикрепляя соответствующие обработчики событий к узлам, которые вы показываете во время редактирования.
    2. Если индекс редактирования не совпадает с индексом ячейки и если ячейка находится в режиме editing state, будет вызван cancelEdit() для этой ячейки. Как и в случае с методом startEdit(), вы должны переопределить этот метод, чтобы очистить визуальные элементы ячейки (и, скорее всего, вернуть Labeled.graphicProperty() обратно в null и установить Labeled.textProperty() в его (возможно, новое) значение). Опять же, убедитесь, что всегда вызываете super.cancelEdit(), чтобы убедиться, что все состояния обновляются правильно.
    3. Если индекс редактирования не совпадает с индексом ячейки и если ячейка не находится в режиме редактирования isEditing(), для этой ячейки ничего не произойдет.

С:

JavaFX 2.0

  • Краткое описание свойств

    Все методыМетоды экземпляровКонкретные методы
    Тип Свойство и описание
    BooleanProperty editable
    Свойство, представляющее, разрешено ли устанавливать данную ячейку в режим редактирования.
    ReadOnlyBooleanProperty editing
    Свойство, представляющее, находится ли данная ячейка в режиме редактирования.
    ReadOnlyBooleanProperty empty
    Свойство, используемое для представления наличия содержимого в ячейке.
    ObjectProperty<T> item
    Значение данных, связанное с данной ячейкой.
    ReadOnlyBooleanProperty selected
    Указывает, выбрана ли данная ячейка.
    • Свойства, унаследованные от класса javafx.scene.control.Labeled

      alignment, contentDisplay, ellipsisString, font, graphic, graphicTextGap, labelPadding, lineSpacing, mnemonicParsing, textAlignment, textFill, textOverrun, text, underline, wrapText
    • Свойства, унаследованные от класса javafx.scene.control.Control

      contextMenu, skin, tooltip
    • Свойства, унаследованные от класса javafx.scene.layout.Region

      background, border, cacheShape, centerShape, height, insets, maxHeight, maxWidth, minHeight, minWidth, opaqueInsets, padding, prefHeight, prefWidth, scaleShape, shape, snapToPixel, width
    • Свойства, унаследованные от класса javafx.scene.Parent

      needsLayout
    • Свойства, унаследованные от класса javafx.scene.Node

      accessibleHelp, accessibleRoleDescription, accessibleRole, accessibleText, blendMode, boundsInLocal, boundsInParent, cacheHint, cache, clip, cursor, depthTest, disabled, disable, effectiveNodeOrientation, effect, eventDispatcher, focused, focusTraversable, hover, id, inputMethodRequests, layoutBounds, layoutX, layoutY, localToParentTransform, localToSceneTransform, managed, mouseTransparent, nodeOrientation, onContextMenuRequested, onDragDetected, onDragDone, onDragDropped, onDragEntered, onDragExited, onDragOver, onInputMethodTextChanged, onKeyPressed, onKeyReleased, onKeyTyped, onMouseClicked, onMouseDragEntered, onMouseDragExited, onMouseDragged, onMouseDragOver, onMouseDragReleased, onMouseEntered, onMouseExited, onMouseMoved, onMousePressed, onMouseReleased, onRotate, onRotationFinished, onRotationStarted, onScrollFinished, onScroll, onScrollStarted, onSwipeDown, onSwipeLeft, onSwipeRight, onSwipeUp, onTouchMoved, onTouchPressed, onTouchReleased, onTouchStationary, onZoomFinished, onZoom, onZoomStarted, opacity, parent, pickOnBounds, pressed, rotate, rotationAxis, scaleX, scaleY, scaleZ, scene, style, translateX, translateY, translateZ, visible
  • Краткое описание полей

    • Поля, унаследованные от класса javafx.scene.layout.Region

      USE_COMPUTED_SIZE, USE_PREF_SIZE
    • Поля, унаследованные от класса javafx.scene.Node

      BASELINE_OFFSET_SAME_AS_HEIGHT
  • Краткое описание конструкторов

    Конструкторы
    Конструктор и описание
    Cell()
    Создаёт ячейку по умолчанию со стилем класса 'cell' по умолчанию.
  • Краткое описание методов

    Все методыМетоды экземпляровКонкретные методы
    Модификатор и тип Метод и описание
    void cancelEdit()
    Вызовите эту функцию для перехода из режима редактирования в режим нередактирования, не сохраняя входные данные пользователя.
    void commitEdit(T newValue)
    Вызовите эту функцию при необходимости (в зависимости от требований взаимодействия пользователя с вашим интерфейсом редактирования ячеек) для выполнения двух задач: отправки соответствующих событий обратно контроллеру базового UI (например,
    BooleanProperty editableProperty()
    Свойство, представляющее, разрешено ли устанавливать данную ячейку в режим редактирования.
    ReadOnlyBooleanProperty editingProperty()
    Свойство, представляющее, находится ли данная ячейка в режиме редактирования.
    ReadOnlyBooleanProperty emptyProperty()
    Свойство, используемое для представления наличия содержимого в ячейке.
    T getItem()
    Возвращает значение данных, связанное с данной ячейкой.
    boolean isEditable()
    Возвращает, разрешено ли устанавливать данную ячейку в режим редактирования.
    boolean isEditing()
    Представляет, находится ли ячейка в режиме редактирования или нет.
    boolean isEmpty()
    Возвращает логическое значение, представляющее, считается ли ячейка пустой.
    protected boolean isItemChanged(T oldItem, T newItem)
    Этот метод вызывается подклассами Cell, чтобы определенные действия, требующие больших вычислений (в частности, вызов updateItem(Object, boolean)) выполнялись только при необходимости (то есть они выполняются только тогда, когда текущее установленное item отличается от предлагаемого нового элемента, который может быть установлен).
    boolean isSelected()
    Возвращает, выбрана ли данная ячейка.
    ObjectProperty<T> itemProperty()
    Значение данных, связанное с данной ячейкой.
    ReadOnlyBooleanProperty selectedProperty()
    Указывает, выбрана ли данная ячейка.
    void setEditable(boolean value)
    Разрешает определённым ячейкам быть нередактируемыми.
    void setItem(T value)
    Устанавливает элемент в указанное значение – не следует вызывать напрямую, так как элемент управляется виртуализированным управлением.
    void startEdit()
    Вызовите эту функцию для перехода из состояния «нередактирование» в состояние «редактирование», если ячейка редактируема.
    protected void updateItem(T item, boolean empty)
    Метод updateItem не должен вызываться разработчиками, но это лучший метод для переопределения разработчиками, чтобы они могли настроить внешний вид ячейки.
    void updateSelected(boolean selected)
    Обновляет, находится ли данная ячейка в состоянии выбора или нет.
    • Методы, унаследованные от класса javafx.scene.control.Labeled

      alignmentProperty, contentDisplayProperty, ellipsisStringProperty, fontProperty, getAlignment, getClassCssMetaData, getContentBias, getContentDisplay, getControlCssMetaData, getEllipsisString, getFont, getGraphic, getGraphicTextGap, getLabelPadding, getLineSpacing, getText, getTextAlignment, getTextFill, getTextOverrun, graphicProperty, graphicTextGapProperty, isMnemonicParsing, isUnderline, isWrapText, labelPaddingProperty, lineSpacingProperty, mnemonicParsingProperty, setAlignment, setContentDisplay, setEllipsisString, setFont, setGraphic, setGraphicTextGap, setLineSpacing, setMnemonicParsing, setText, setTextAlignment, setTextFill, setTextOverrun, setUnderline, setWrapText, textAlignmentProperty, textFillProperty, textOverrunProperty, textProperty, toString, underlineProperty, wrapTextProperty
    • Методы, унаследованные от класса javafx.scene.control.Control

      computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, createDefaultSkin, executeAccessibleAction, getBaselineOffset, getContextMenu, getCssMetaData, getSkin, getTooltip, isResizable, layoutChildren, queryAccessibleAttribute, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
    • Методы, унаследованные от класса javafx.scene.layout.Region

      backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapSize, snapSpace, snapToPixelProperty, widthProperty
    • Методы, унаследованные от класса javafx.scene.Parent

      getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
    • Методы, унаследованные от класса javafx.scene.Node

      accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, translateXProperty, translateYProperty, translateZProperty, usesMirroring, visibleProperty
    • Методы, унаследованные от класса java.lang.Object

      clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Подробное описание свойства

    • item

      public final ObjectProperty<T> itemProperty
      Значение данных, связанное с этой ячейкой. Это значение устанавливается виртуализированным элементом управления при создании или обновлении ячейки. Оно представляет собой исходное значение данных.

      Это значение должно устанавливаться только в подклассах ячейки виртуализированными элементами управления пользовательским интерфейсом, которые знают, как правильно работать с классом ячейки.

    • empty

      public final ReadOnlyBooleanProperty emptyProperty
      Свойство, используемое для представления наличия содержимого в ячейке. Если оно истинно, ячейка не содержит данных и не связана с каким-либо элементом данных в виртуализированном элементе управления.

      Когда ячейка пуста, ее можно стилизовать иначе с помощью псевдокласса состояния CSS 'empty'. Например, она может не получать выделение альтернативной строки или не получать заполнение фоном при наведении курсора.

      См. также:

      isEmpty()

    • selected

      public final ReadOnlyBooleanProperty selectedProperty
      Указывает, выбрана ли эта ячейка. Например, ListView определяет одну или несколько ячеек как "выбранные".

      См. также:

      isSelected()

    • editing

      public final ReadOnlyBooleanProperty editingProperty
      Свойство, представляющее, находится ли эта ячейка в состоянии редактирования.

      См. также:

      isEditing()

    • editable

      public final BooleanProperty editableProperty
      Свойство, представляющее, разрешено ли вводить эту ячейку в состояние редактирования. По умолчанию editable устанавливается в true для ячеек (хотя для подкласса ячейки, чтобы ему было разрешено переходить в состояние редактирования, могут потребоваться дополнительные критерии. Например, ListCell требует, чтобы свойство ListView editable также было истинным).

      См. также:

      isEditable(), setEditable(boolean)

  • Подробное описание конструкторов

    • Cell

      public Cell()
      Создает ячейку по умолчанию со стилем по умолчанию 'cell'.
  • Подробное описание методов

    • itemProperty

      public final ObjectProperty<T> itemProperty()
      Значение данных, связанное с этой ячейкой. Это значение устанавливается виртуализированным элементом управления при создании или обновлении ячейки. Оно представляет собой исходное значение данных.

      Это значение должно устанавливаться только в подклассах ячейки виртуализированными элементами управления пользовательским интерфейсом, которые знают, как правильно работать с классом ячейки.

    • setItem

      public final void setItem(T value)
      Устанавливает значение item - не следует вызывать напрямую, так как item управляется виртуализированным элементом управления.
    • getItem

      public final T getItem()
      Возвращает значение данных, связанное с этой ячейкой.
    • emptyProperty

      public final ReadOnlyBooleanProperty emptyProperty()
      Свойство, используемое для представления наличия содержимого в ячейке. Если оно истинно, ячейка не содержит данных и не связана с каким-либо элементом данных в виртуализированном элементе управления.

      Когда ячейка пуста, ее можно стилизовать иначе с помощью псевдокласса состояния CSS 'empty'. Например, она может не получать выделение альтернативной строки или не получать заполнение фоном при наведении курсора.

      См. также:

      isEmpty()

    • isEmpty

      public final boolean isEmpty()
      Возвращает логическое значение, представляющее, считается ли ячейка пустой.
    • selectedProperty

      public final ReadOnlyBooleanProperty selectedProperty()
      Указывает, выбрана ли эта ячейка. Например, ListView определяет одну или несколько ячеек как "выбранные".

      См. также:

      isSelected()

    • isSelected

      public final boolean isSelected()
      Возвращает, выбрана ли эта ячейка в данный момент.

      Возвращает:

      Истина, если ячейка выбрана, ложь в противном случае.

    • isEditing

      public final boolean isEditing()
      Представляет, находится ли ячейка в состоянии редактирования в данный момент.
    • editingProperty

      public final ReadOnlyBooleanProperty editingProperty()
      Свойство, представляющее, находится ли эта ячейка в состоянии редактирования.

      См. также:

      isEditing()

    • setEditable

      public final void setEditable(boolean value)
      Разрешает или запрещает редактирование определенных ячеек. Это полезно в случаях, когда, например, у списка есть "строки заголовка" — нет смысла, чтобы строки заголовка были редактируемыми, поэтому для них следует установить editable в false.

      Параметры:

      value - Логическое значение, представляющее, является ли ячейка редактируемой. Если true, ячейка редактируемая, если false, ячейка не редактируемая.

    • isEditable

      public final boolean isEditable()
      Возвращает, разрешено ли вводить эту ячейку в состояние редактирования.
    • editableProperty

      public final BooleanProperty editableProperty()
      Свойство, представляющее, разрешено ли вводить эту ячейку в состояние редактирования. По умолчанию editable устанавливается в true для ячеек (хотя для подкласса ячейки, чтобы ему было разрешено переходить в состояние редактирования, могут потребоваться дополнительные критерии. Например, ListCell требует, чтобы свойство ListView editable также было истинным).

      См. также:

      isEditable(), setEditable(boolean)

    • startEdit

      public void startEdit()
      Вызовите эту функцию, чтобы перейти из состояния, не являющегося редактированием, в состояние редактирования, если ячейка редактируема. Если эта ячейка уже находится в состоянии редактирования, она останется в нем.
    • cancelEdit

      public void cancelEdit()
      Вызовите эту функцию, чтобы перейти из состояния редактирования в состояние, не являющееся редактированием, без сохранения пользовательского ввода.
    • commitEdit

      public void commitEdit(T newValue)
      Вызовите эту функцию при необходимости (в зависимости от требований пользовательского интерфейса редактирования вашей ячейки) для выполнения двух действий:
      1. Отправка соответствующих событий обратно в элемент управления базового пользовательского интерфейса (например, ListView). Это запустит процесс внесения этого изменения в соответствующий источник данных/свойство (хотя это не гарантирует, что это будет выполнено успешно — это зависит от используемого конкретного обработчика сохранения изменения). Для получения более подробной информации см. javadoc класса элемента управления пользовательским интерфейсом.
      2. Начните переход из состояния редактирования в состояние, не являющееся редактированием.

      Как правило, нет необходимости переопределять этот метод в реализациях пользовательских ячеек — достаточно просто вызвать этот метод при необходимости (например, когда пользователь нажимает Enter, вы можете сделать что-то вроде cell.commitEdit(converter.fromString(textField.getText()));).

      Параметры:

      newValue - Значение, введенное конечным пользователем, которое следует сохранить соответствующим образом, учитывая источник данных, лежащий в основе пользовательского интерфейса, и обработчик сохранения изменения редактирования элемента управления пользовательским интерфейсом.

    • updateItem

      protected void updateItem(T item,
                                boolean empty)
      Метод updateItem не должен вызываться разработчиками, но это лучший метод для разработчиков, чтобы переопределить его, чтобы позволить им настроить визуальные элементы ячейки. Для уточнения, разработчики никогда не должны вызывать этот метод в своем коде (они должны позволить элементу управления пользовательским интерфейсом, например элементу управления ListView, вызвать этот метод). Однако цель метода updateItem заключается в том, чтобы разработчики, при указании пользовательских фабрик ячеек (опять же, как у ListView cell factory), могли переопределить метод updateItem, чтобы полностью настроить ячейку.

      Крайне важно, чтобы подклассы ячейки правильно переопределяли метод 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). Если этого не сделать, свойства item и empty не устанавливаются правильно, и вы, вероятно, столкнетесь с графическими проблемами.
      2. Мы проверяем условие empty, и если оно истинно, устанавливаем свойства text и graphic в null. Если мы этого не сделаем, почти гарантированно, что конечные пользователи увидят графические артефакты в ячейках неожиданно.

      Параметры:

      item - Новый элемент для ячейки.

    • updateSelected

      public void updateSelected(boolean selected)
      Обновляет, находится ли эта ячейка в выбранном состоянии.

      Параметры:

      selected - нужно ли выбрать эту ячейку.

    • isItemChanged

      protected boolean isItemChanged(T oldItem,
                                      T newItem)
      Этот метод вызывается подклассами ячейки, чтобы определенные действия с интенсивным использованием процессора (в частности, вызов updateItem(Object, boolean)) выполнялись только при необходимости (то есть, они выполняются только тогда, когда текущее установленное значение item отличается от предлагаемого нового элемента, который можно установить).

      По умолчанию этот метод проверяет равенство, но разработчики могут переопределить этот метод, чтобы выполнить проверки другими способами, специфичными для их области.

      Параметры:

      oldItem - Текущий установленный элемент, содержащийся в ячейке (т.е. он такой же, как доступен через getItem()).

      Возвращает:

      Возвращает true, если новый элемент считается отличным от старого элемента. По умолчанию этот метод проверяет равенство, но подклассы могут изменить реализацию, чтобы проверить, соответствующие их потребностям.

      С момента:

      JavaFX 8u40

© 2008, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from JavaFX API Documentation.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Java, JavaFX and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API