Класс 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 и вы хотите сделать все отрицательные значения красными, а все положительные или нулевые — черными. Один из способов добиться этого — использовать пользовательскую фабрику ячеек, которая изменяет стиль ячейки в зависимости от того, отрицательно ли значение. Это так же просто, как добавить код для проверки, отрицательно ли число в ячейке, и добавить стиль «отрицательный». Если число не отрицательное, строка «отрицательный» должна быть удалена. Этот подход позволяет определить цвета из 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()— идеальное время для изменения визуальных элементов ячейки. Например (и обратите внимание, что этот пример более подробно описан в javadoc для элементов управления пользовательского интерфейса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 |
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 |
Сохраняет изменения в значении ячейки. |
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 |
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, 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
Это значение должно устанавливаться только в подклассах ячейки виртуализированными элементами управления пользовательского интерфейса, которые знают, как правильно работать с классом ячейки.
- См. также:
empty
public final ReadOnlyBooleanProperty emptyProperty
Если ячейка пуста, её можно стилизовать по-другому с помощью псевдокласса состояния CSS «empty». Например, она может не получать выделение альтернативных строк или не получать заполнение фоном при наведении.
- См. также:
selected
public final ReadOnlyBooleanProperty selectedProperty
- См. также:
editing
public final ReadOnlyBooleanProperty editingProperty
- См. также:
editable
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)
- Отправить соответствующие события обратно в управляющий элемент базового пользовательского интерфейса (например,
ListView). Это запустит процесс передачи этих изменений обратно к соответствующему источнику данных/свойству (хотя не гарантирует, что это будет выполнено успешно - это зависит от конкретного обработчика сохранения изменений). Более подробную информацию см. в документации к классу элемента управления пользовательским интерфейсом. - Начать переход из состояния редактирования в состояние не редактирования.
В общем случае нет необходимости переопределять этот метод в пользовательских реализациях ячеек - достаточно просто вызвать этот метод при необходимости (например, когда пользователь нажал Enter, вы можете сделать что-то вроде cell.commitEdit(converter.fromString(textField.getText()));
- Parameters:
-
newValue- значение, введённое пользователем, которое должно быть сохранено соответствующим образом, учитывая источник данных, лежащий в основе пользовательского интерфейса, и обработчик сохранения изменений управляющего элемента пользовательского интерфейса
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.