Класс 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 и другие подобные элементы управления могут потенциально использоваться для отображения невероятно больших объемов данных, создание фактической ячейки для каждого элемента в элементе управления нецелесообразно. Мы представляем чрезвычайно большие наборы данных, используя лишь очень небольшое количество ячеек. Каждая ячейка "переиспользуется". Именно это мы имеем в виду, когда говорим, что эти элементы управления виртуализированы.
Поскольку ячейка — это элемент управления, она по сути является "моделью". Ее оболочка отвечает за определение внешнего вида и макета, а поведение — за обработку всех событий ввода и использование этой информации для изменения состояния элемента управления. Кроме того, ячейка стилизуется из 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 существует для всех вышеупомянутых элементов управления, и процесс в целом точно такой же):
- Пользователь запрашивает режим редактирования ячейки (через команды клавиатуры или мыши), или разработчик запрашивает, чтобы ячейка перешла в режим редактирования (вызвав метод, такой как метод 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
Краткое описание свойств
| Тип | Свойство | Описание |
|---|---|---|
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.css.Styleable
getStyleableNode, getStyleClass
Подробности свойств
item
public final ObjectProperty<T> itemProperty
Это значение следует устанавливать только в подклассах ячейки элементами виртуализованного пользовательского интерфейса, которые знают, как правильно работать с классом ячейки.
- См. также:
-
getItem(),setItem(T)
empty
public final ReadOnlyBooleanProperty emptyProperty
Когда ячейка пуста, ее можно стилизовать по-другому с помощью псевдокласса состояния CSS «empty». Например, она может не получать выделение альтернативной строки или не получать заливку фона при наведении.
- См. также:
isEmpty()
selected
public final ReadOnlyBooleanProperty selectedProperty
- См. также:
isSelected()
editing
public final ReadOnlyBooleanProperty editingProperty
- См. также:
isEditing()
editable
public final BooleanProperty editableProperty
editable также было true).- См. также:
-
isEditable(),setEditable(boolean)
Подробности конструктора
Cell
public 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()
Когда ячейка пуста, ее можно стилизовать по-другому с помощью псевдокласса состояния CSS «empty». Например, она может не получать выделение альтернативной строки или не получать заливку фона при наведении.
- См. также:
isEmpty()
isEmpty
public final boolean isEmpty()
- Возвращает:
- true, если ячейка пуста, иначе false
selectedProperty
public final ReadOnlyBooleanProperty selectedProperty()
- См. также:
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)
- Параметры:
-
value- логическое значение, представляющее, разрешено ли редактирование ячейки. Если true, ячейка редактируема, а если false, ячейка не может быть отредактирована.
isEditable
public final boolean isEditable()
- Возвращает:
- true, если редактирование этой ячейки разрешено, иначе false
editableProperty
public final BooleanProperty editableProperty()
editable также было true).- См. также:
-
isEditable(),setEditable(boolean)
startEdit
public void startEdit()
cancelEdit
public void cancelEdit()
commitEdit
public void commitEdit(T newValue)
- Отправить соответствующие события обратно в элемент управления базовым UI (например,
ListView). Это инициирует процесс передачи этого изменения в соответствующий источник данных/свойство (хотя это не гарантирует, что это будет успешно — это зависит от конкретного обработчика сохранения изменений редактирования, используемого). Дополнительные сведения см. в документации по классу элемента управления 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, так как отсутствие этого может привести к проблемам, таким как пустые ячейки или ячейки с неожиданным содержимым.
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- является ли эта ячейка данными из списка. Если она пуста, то она не представляет никаких данных домена, а используется для отрисовки пустой строки.
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.