Spec-Zone.ru › OpenJavaFX 17

Класс 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 и другие подобные элементы управления могут потенциально использоваться для отображения невероятно больших объемов данных, создание фактической ячейки для каждого элемента в элементе управления нецелесообразно. Мы представляем чрезвычайно большие наборы данных, используя лишь очень небольшое количество ячеек. Каждая ячейка "переиспользуется". Именно это мы имеем в виду, когда говорим, что эти элементы управления виртуализированы.

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

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

Ячейка устанавливает focusTraversable в false.

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

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

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

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

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

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

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

Свойства
Тип Свойство Описание
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, 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)
Сохраняет изменения в значении ячейки.
BooleanProperty editableProperty()
Свойство, определяющее, разрешено ли редактирование этой ячейки.
ReadOnlyBooleanProperty editingProperty()
Свойство, определяющее, находится ли ячейка в состоянии редактирования.
ReadOnlyBooleanProperty emptyProperty()
Свойство, определяющее, содержит ли ячейка какие-либо данные.
protected Boolean getInitialFocusTraversable()
Возвращает начальное состояние перехода фокуса для этого элемента управления, для корректной установки его начального значения движком JavaFX CSS.
T getItem()
Возвращает значение данных, связанное с этой ячейкой.
boolean isEditable()
Возвращает, разрешено ли редактирование этой ячейки.
boolean isEditing()
Представляет, находится ли ячейка в состоянии редактирования.
boolean isEmpty()
Возвращает булево значение, указывающее, считается ли ячейка пустой.
protected boolean isItemChanged​(T oldItem, T newItem)
Этот метод вызывается подклассами ячейки, чтобы определённые ресурсоёмкие действия (в частности, вызов 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, 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, getTooltip, isResizable, setContextMenu, 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, 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, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, 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, 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.scene.control.Skinnable

getSkin, setSkin

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

getStyleableNode, getStyleClass

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

item

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

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

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

empty

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

Когда ячейка пуста, ее можно стилизовать по-другому с помощью псевдокласса состояния 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 также было true).
См. также:
isEditable(), setEditable(boolean)

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

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()
Возвращает boolean, представляющий, считается ли ячейка пустой.
Возвращает:
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)
Разрешает или запрещает редактирование некоторых ячеек. Это полезно в тех случаях, когда, скажем, у списка есть «заголовочные строки» — нет смысла, чтобы заголовочные строки были редактируемыми, поэтому для них editable должен быть установлен в 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). Это инициирует процесс передачи этого изменения в соответствующий источник данных/свойство (хотя это не гарантирует, что это будет успешно — это зависит от конкретного обработчика сохранения изменений редактирования, используемого). Дополнительные сведения см. в документации по классу элемента управления 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, так как отсутствие этого может привести к проблемам, таким как пустые ячейки или ячейки с неожиданным содержимым.

 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 - является ли эта ячейка данными из списка. Если она пуста, то она не представляет никаких данных домена, а используется для отрисовки пустой строки.

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-элементы имеют состояние focus traversable установленным в 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