Spec-Zone.ru › OpenJavaFX 24

Класс 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 и вы хотите сделать все отрицательные значения красными, а все положительные или нулевые — черными. Один из способов добиться этого — использовать пользовательскую фабрику ячеек, которая изменяет стиль ячейки в зависимости от того, отрицательно ли значение. Это так же просто, как добавить код для проверки, отрицательно ли число в ячейке, и добавить стиль «отрицательный». Если число не отрицательное, строка «отрицательный» должна быть удалена. Этот подход позволяет определить цвета из 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 для элементов управления пользовательского интерфейса 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, textTruncated, 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, isTextTruncated, isUnderline, isWrapText, labelPaddingProperty, lineSpacingProperty, mnemonicParsingProperty, setAlignment, setContentDisplay, setEllipsisString, setFont, setGraphic, setGraphicTextGap, setLineSpacing, setMnemonicParsing, setText, setTextAlignment, setTextFill, setTextOverrun, setUnderline, setWrapText, textAlignmentProperty, textFillProperty, textOverrunProperty, textProperty, textTruncatedProperty, 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, requestFocusTraversal, 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()

empty

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

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

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

selected

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

editing

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

editable

public final BooleanProperty editableProperty
Свойство, представляющее, разрешено ли редактирование этой ячейки. По умолчанию editable имеет значение 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()
Возвращает 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. Отправить соответствующие события обратно в управляющий элемент базового пользовательского интерфейса (например, ListView). Это запустит процесс передачи этих изменений обратно к соответствующему источнику данных/свойству (хотя не гарантирует, что это будет выполнено успешно - это зависит от конкретного обработчика сохранения изменений). Более подробную информацию см. в документации к классу элемента управления пользовательским интерфейсом.
  2. Начать переход из состояния редактирования в состояние не редактирования.

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

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

updateItem

protected void updateItem(T item, boolean empty)
Метод updateItem не должен вызываться разработчиками, но это лучший метод для переопределения, чтобы позволить им настроить визуальное представление ячейки. Чтобы уточнить, разработчики никогда не должны вызывать этот метод в своём коде (они должны позволить элементу управления пользовательским интерфейсом, например, 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 для корректной установки начального значения. Этот метод переопределяется, так как по умолчанию элементы управления пользовательским интерфейсом имеют фокус, установленный в true, но это неприменимо к этому элементу управления.
Overrides:
getInitialFocusTraversable в классе Control
Returns:
начальное состояние фокусировки для данного элемента управления
Since:
9

Сообщить об ошибке или предложить улучшение
Авторское право © 2008, 2025, Oracle и/или его аффилированные лица. Все права защищены.

© 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