Класс Cell<T>
- Параметры типа:
-
T- Тип элемента, содержащегося в ячейке.
- Все реализованные интерфейсы:
-
Styleable,EventTarget,Skinnable
- Прямые известные подклассы:
-
DateCell,IndexedCell
public class Cell<T> extends Labeled
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 существует для всех упомянутых выше элементов управления, и процесс в целом одинаков):
- Пользователь запрашивает режим редактирования ячейки (через команды клавиатуры или мыши), или разработчик запрашивает, чтобы ячейка перешла в режим редактирования (вызвав метод, такой как метод ListView
edit). Примечание: Если пользователь дважды щелкает или выполняет соответствующую команду клавиатуры для начала редактирования, то он фактически вызывает соответствующий метод редактирования для элемента управления (т.е. метод входа для редактирования, инициированного пользователем, и инициированного разработчиком, одинаковый). - Каждая ячейка в видимой области элемента управления уведомляется о том, что текущий
editing cellизменился, и проверяет, является ли это она сама. В этот момент может произойти одно из трех событий:- Если индекс редактирования совпадает с индексом ячейки, на этой ячейке будет вызван метод
startEdit(). Некоторые указания:- Рекомендуется, чтобы подклассы Cell переопределяли метод
startEdit()для обновления визуального представления ячейки при входе в состояние редактирования. Однако важно, чтобы подклассы, переопределяющие методstartEdit(), продолжали вызыватьsuper.startEdit(), чтобы родительские классы могли обновлять дополнительное состояние, необходимое для успешного редактирования. - В методе
startEdit()— идеальное время для изменения визуального представления ячейки. Например (и обратите внимание, что этот пример более подробно рассмотрен в документации UI-элемента управления дляListViewи т.д.), можно установить свойствоLabeled.graphicProperty()ячейки в полеTextFieldи установить свойствоLabeled.textProperty()в значение null. Это позволит конечным пользователям вводить данные и вносить изменения в вашу модель данных. - Когда пользователь закончил редактирование, он захочет подтвердить или отменить изменения. Вы несете ответственность за обработку этого (например, используя клавишу Enter для
commit the editи клавишу ESC дляcancel the edit). Вы делаете это, прикрепляя соответствующие обработчики событий к узлам, отображаемым во время редактирования.
- Рекомендуется, чтобы подклассы Cell переопределяли метод
- Если индекс редактирования не совпадает с индексом ячейки и если ячейка в данный момент находится в состоянии
editing state, на этой ячейке будет вызван методcancelEdit(). Как и в случае с методомstartEdit(), вам следует переопределить этот метод для очистки визуального представления ячейки (и, скорее всего, вернуть свойствоLabeled.graphicProperty()к значению null и установить свойствоLabeled.textProperty()к его (возможно, новому) значению). Опять же, обязательно вызывайтеsuper.cancelEdit(), чтобы убедиться, что все состояние обновлено правильно. - Если индекс редактирования не совпадает с индексом ячейки и если ячейка в данный момент не находится в состоянии редактирования
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 |
Подтверждает редактирование значения ячейки. |
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 |
Этот метод вызывается подклассами ячейки, чтобы определённые действия с интенсивной загрузкой процессора (в частности, вызов updateItem(Object, boolean)) выполнялись только при необходимости (то есть, они выполняются только тогда, когда текущее установленное item считается отличным от предлагаемого нового элемента, который может быть установлен). |
final boolean |
isSelected() |
Возвращает, выбрана ли ячейка в данный момент. |
final ObjectProperty<T> |
itemProperty() |
Значение данных, связанное с этой ячейкой. |
final ReadOnlyBooleanProperty |
selectedProperty() |
Указывает, выбрана ли данная ячейка. |
final void |
setEditable |
Разрешает некоторым ячейкам не быть редактируемыми. |
final void |
setItem |
Устанавливает элемент в заданное значение - не следует вызывать напрямую, так как элемент управляется виртуализированным элементом управления. |
void |
startEdit() |
Начинает редактирование значения ячейки. |
protected void |
updateItem |
Метод updateItem не должен вызываться разработчиками, но это лучший метод для переопределения разработчиками, чтобы позволить им настроить визуализацию ячейки. |
void |
updateSelected |
Обновляет состояние выбора этой ячейки. |
Методы, объявленные в классе 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
Это значение должно устанавливаться только в подклассах ячейки виртуализированными элементами управления пользовательским интерфейсом, которые знают, как правильно работать с классом ячейки.
- См. также:
пусто
public final ReadOnlyBooleanProperty emptyProperty
Когда ячейка пуста, она может быть стилизована по-другому с помощью псевдокласса состояния CSS 'empty'. Например, она может не получать выделение альтернативных строк или не получать заполнение фоном при наведении курсора.
- См. также:
выделено
public final ReadOnlyBooleanProperty selectedProperty
- См. также:
редактирование
public final ReadOnlyBooleanProperty editingProperty
- См. также:
редактируемо
public final BooleanProperty editableProperty
editable также было true).- См. также:
Подробности конструктора
Cell
public Cell()
Подробности метода
itemProperty
public final ObjectProperty<T> itemProperty()
Это значение должно устанавливаться только в подклассах ячейки виртуализированными элементами управления пользовательским интерфейсом, которые знают, как правильно работать с классом ячейки.
- Возвращает:
- значение данных, связанное с этой ячейкой
- См. также:
setItem
public final void setItem(T value)
- Параметры:
-
value- новое значение данных для установки в этой ячейке
getItem
public final T getItem()
- Возвращает:
- значение данных, связанное с этой ячейкой
emptyProperty
public final ReadOnlyBooleanProperty emptyProperty()
Когда ячейка пуста, она может быть стилизована по-другому с помощью псевдокласса состояния CSS 'empty'. Например, она может не получать выделение альтернативных строк или не получать заполнение фоном при наведении курсора.
- Возвращает:
- представление того, содержит ли эта ячейка какие-либо данные
- См. также:
isEmpty
public final boolean isEmpty()
- Возвращает:
- true, если ячейка пуста, иначе false
selectedProperty
public final ReadOnlyBooleanProperty selectedProperty()
- Возвращает:
- представление того, выбрана ли эта ячейка
- См. также:
isSelected
public final boolean isSelected()
- Возвращает:
- True, если ячейка выбрана, false в противном случае.
isEditing
public final boolean isEditing()
- Возвращает:
- true, если эта ячейка в настоящее время находится в состоянии редактирования, иначе false
editingProperty
public final ReadOnlyBooleanProperty editingProperty()
- Возвращает:
- представление того, находится ли эта ячейка в данный момент в состоянии редактирования
- См. также:
setEditable
public final void setEditable(boolean value)
- Параметры:
-
value- булево значение, представляющее, редактируема ли ячейка или нет. Если true, ячейка редактируема, а если false, ячейка не может быть отредактирована.
isEditable
public final boolean isEditable()
- Возвращает:
- true, если редактирование этой ячейки разрешено, иначе false
editableProperty
public final BooleanProperty editableProperty()
editable также было true).- Возвращает:
- представление того, разрешено ли редактирование этой ячейки
- См. также:
startEdit
public void startEdit()
cancelEdit
public void cancelEdit()
commitEdit
public void commitEdit(T newValue)
- Сгенерировать соответствующие события обратно в элемент управления базовым UI (например,
ListView). Это запустит процесс отправки этого изменения обратно к соответствующему источнику данных/свойству (хотя это не гарантирует, что это будет успешным — это зависит от конкретного обработчика сохранения изменений). Обратитесь к javadoc-документации класса элемента управления UI для получения более подробной информации. - Начните переход из состояния редактирования в состояние без редактирования.
В общем случае нет необходимости переопределять этот метод в реализациях пользовательских ячеек — должно быть достаточно просто вызвать этот метод, когда это уместно (например, когда пользователь нажал Enter, вы можете сделать что-то вроде cell.commitEdit(converter.fromString(textField.getText()));)
- Параметры:
-
newValue- значение, введённое конечным пользователем, которое должно быть сохранено соответствующим образом с учётом источника данных, лежащего в основе пользовательского интерфейса, и установленного обработчика сохранения изменений UI-элемента управления
updateItem
protected void updateItem(T item, boolean empty)
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());
}
}
Обратите внимание на два важных момента в этом примере кода:
- Мы вызываем метод super.updateItem(T, boolean). Если этого не сделать, свойства item и empty не будут корректно установлены, и вы, скорее всего, столкнетесь с графическими проблемами.
- Мы проверяем условие
emptyи, если оно истинно, устанавливаем свойства text и graphic в значение null. Если этого не сделать, с большой вероятностью пользователи увидят графические артефакты в ячейках.
- Parameters:
-
item- Новое значение для ячейки. -
empty- Флаг, указывающий, представляет ли данная ячейка данные из списка. Если значение false, то ячейка не содержит данных, а используется для отображения пустой строки.
updateSelected
public void updateSelected(boolean selected)
- Parameters:
-
selected- Флаг, указывающий, следует ли выделить ячейку.
isItemChanged
protected boolean isItemChanged(T oldItem, T newItem)
updateItem(Object, boolean)) выполнялись только при необходимости (то есть, выполняются только тогда, когда текущее установленное значение item считается отличным от предлагаемого нового значения). По умолчанию этот метод использует сравнение на равенство, но разработчики могут переопределить этот метод для выполнения проверок другими способами, специфичными для их предметной области.
- Parameters:
-
oldItem- Текущее значение элемента в ячейке (то же самое, что доступно черезgetItem()). -
newItem- Элемент, который будет установлен в ячейку, если этот метод возвращает true. Если этот метод возвращает false, элемент, возможно, не будет установлен. - Returns:
- Возвращает true, если новое значение элемента считается отличным от старого. По умолчанию этот метод использует сравнение на равенство, но подклассы могут изменить реализацию для проверки, соответствующей их потребностям.
- Since:
- JavaFX 8u40
getInitialFocusTraversable
protected Boolean getInitialFocusTraversable()
- 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.