Spec-Zone.ru › OpenJavaFX 21

Класс 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. Несмотря на термин, графикой может быть любой узел, и он будет полностью интерактивным. Например, ListCell можно настроить с 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, которая должна быть использована. Если фабрика ячеек не предоставлена, будет использоваться встроенная реализация по умолчанию.

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

 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 для ячейки и подклассов ячейки.

Конечно, мы также можем использовать 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 на БЕЛЫЙ, вы можете сделать следующее в 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 добавляет два других псевдокласса состояния: "odd" и "even". С помощью этого вы можете получить чередование строк, выполнив что-то вроде этого в файле CSS:
 .list-cell:odd {
   -fx-background-color: grey;
 }
Каждый из этих примеров не требует изменений кода. Просто обновите свой CSS-файл, чтобы изменить цвета. Вы также можете использовать псевдоклассы "hover" и другие псевдоклассы в CSS так же, как и с другими элементами управления.

Другой подход к первому примеру выше (форматирование списка чисел) заключался бы в использовании стилей классов. Предположим, у вас есть ObservableList чисел для отображения в ListView и вы хотите сделать цвет всех отрицательных значений красным, а всех положительных или нулевых значений черным. Один из способов достижения этого — использование пользовательской cellFactory, которая изменяет styleClass ячейки в зависимости от того, является ли значение отрицательным или положительным. Это так же просто, как добавление кода для проверки, является ли число в ячейке отрицательным, и добавление styleClass "negative". Если число не отрицательно, строка "negative" должна быть удалена. Этот подход позволяет определять цвета из 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() — идеальное время для изменения визуального представления ячейки. Например (и обратите внимание, что этот пример более подробно рассмотрен в документации 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(), ничего не произойдет с этой ячейкой.
Since:
JavaFX 2.0

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

Тип Свойство Описание
final BooleanProperty editable
Свойство, определяющее, разрешено ли устанавливать данную ячейку в состояние редактирования.
final ReadOnlyBooleanProperty editing
Свойство, определяющее, находится ли данная ячейка в состоянии редактирования.
final ReadOnlyBooleanProperty empty
Свойство, используемое для определения, содержит ли ячейка какие-либо данные.
final ObjectProperty<T> item
Значение данных, связанное с этой ячейкой.
final 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, focusVisible, focusWithin, 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, viewOrder, 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)
Подтверждает редактирование значения ячейки.
final BooleanProperty editableProperty()
Свойство, определяющее, разрешено ли устанавливать данную ячейку в состояние редактирования.
final ReadOnlyBooleanProperty editingProperty()
Свойство, определяющее, находится ли данная ячейка в состоянии редактирования.
final ReadOnlyBooleanProperty emptyProperty()
Свойство, используемое для определения, содержит ли ячейка какие-либо данные.
protected Boolean getInitialFocusTraversable()
Возвращает начальное состояние перемещения фокуса для данного элемента управления, для корректного его первоначального значения в JavaFX CSS.
final T getItem()
Возвращает значение данных, связанное с этой ячейкой.
final boolean isEditable()
Возвращает, разрешено ли установить данную ячейку в состояние редактирования.
final boolean isEditing()
Указывает, находится ли ячейка в состоянии редактирования.
final boolean isEmpty()
Возвращает булево значение, указывающее, пуста ли ячейка.
protected boolean isItemChanged(T oldItem, T newItem)
Этот метод вызывается подклассами ячейки, чтобы определённые действия с интенсивной загрузкой процессора (в частности, вызов updateItem(Object, boolean)) выполнялись только при необходимости (то есть, они выполняются только тогда, когда текущее установленное item считается отличным от предлагаемого нового элемента, который может быть установлен).
final boolean isSelected()
Возвращает, выбрана ли ячейка в данный момент.
final ObjectProperty<T> itemProperty()
Значение данных, связанное с этой ячейкой.
final ReadOnlyBooleanProperty selectedProperty()
Указывает, выбрана ли данная ячейка.
final void setEditable(boolean value)
Разрешает некоторым ячейкам не быть редактируемыми.
final 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, getInitialAlignment, 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, underlineProperty, wrapTextProperty

Методы, объявленные в классе javafx.scene.control.Control

computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, contextMenuProperty, createDefaultSkin, getContextMenu, getCssMetaData, getSkin, getTooltip, isResizable, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty

Методы, объявленные в классе javafx.scene.layout.Region

backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, computePrefHeight, computePrefWidth, 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, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty

Методы, объявленные в классе javafx.scene.Parent

getBaselineOffset, getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, layoutChildren, 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, executeAccessibleAction, fireEvent, focusedProperty, focusTraversableProperty, focusVisibleProperty, focusWithinProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, 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, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isFocusVisible, isFocusWithin, 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, lookup, 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, queryAccessibleAttribute, 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, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Методы, объявленные в интерфейсе javafx.css.Styleable

getStyleableNode

Подробности свойства

item

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

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

См. также:
  • getItem()
  • setItem(T)
  • itemProperty()

пусто

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

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

См. также:
  • isEmpty()
  • emptyProperty()

выделено

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

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

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

редактируемо

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

Подробности конструктора

Cell

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

Подробности метода

itemProperty

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

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

Возвращает:
значение данных, связанное с этой ячейкой
См. также:
  • getItem()
  • setItem(T)

setItem

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

getItem

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

emptyProperty

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

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

Возвращает:
представление того, содержит ли эта ячейка какие-либо данные
См. также:
  • isEmpty()

isEmpty

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

selectedProperty

public final ReadOnlyBooleanProperty selectedProperty()
Указывает, выбрана ли эта ячейка. Например, ListView определяет ноль или более ячеек как "выбранные" ячейки.
Возвращает:
представление того, выбрана ли эта ячейка
См. также:
  • isSelected()

isSelected

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

isEditing

public final boolean isEditing()
Представляет, находится ли ячейка в данный момент в состоянии редактирования или нет.
Возвращает:
true, если эта ячейка в настоящее время находится в состоянии редактирования, иначе false

editingProperty

public final ReadOnlyBooleanProperty editingProperty()
Свойство, представляющее, находится ли эта ячейка в данный момент в состоянии редактирования.
Возвращает:
представление того, находится ли эта ячейка в данный момент в состоянии редактирования
См. также:
  • isEditing()

setEditable

public final void setEditable(boolean value)
Разрешает определённым ячейкам не быть редактируемыми. Это полезно в тех случаях, когда, например, у списка есть «заголовки строк» — не имеет смысла, чтобы заголовки строк были редактируемыми, поэтому для них должно быть установлено редактирование в false.
Параметры:
value - булево значение, представляющее, редактируема ли ячейка или нет. Если true, ячейка редактируема, а если false, ячейка не может быть отредактирована.

isEditable

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

editableProperty

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

startEdit

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

cancelEdit

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

commitEdit

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

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

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

updateItem

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

updateSelected

public void updateSelected(boolean selected)
Обновляет состояние выделения ячейки.
Parameters:
selected - Флаг, указывающий, следует ли выделить ячейку.

isItemChanged

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

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

Parameters:
oldItem - Текущее значение элемента в ячейке (то же самое, что доступно через getItem()).
newItem - Элемент, который будет установлен в ячейку, если этот метод возвращает true. Если этот метод возвращает false, элемент, возможно, не будет установлен.
Returns:
Возвращает true, если новое значение элемента считается отличным от старого. По умолчанию этот метод использует сравнение на равенство, но подклассы могут изменить реализацию для проверки, соответствующей их потребностям.
Since:
JavaFX 8u40

getInitialFocusTraversable

protected Boolean getInitialFocusTraversable()
Возвращает начальное состояние фокусируемости этого элемента управления, используемое движком JavaFX CSS для правильной установки его начального значения. Этот метод переопределен, так как по умолчанию фокусируемость элементов управления UI установлена в true, но это не подходит для данного элемента управления.
Overrides:
getInitialFocusTraversable в классе Control
Returns:
начальное состояние фокусируемости этого элемента управления
Since:
9

© 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