Класс Cell<T>
- javafx.scene.Node
-
- javafx.scene.Parent
-
- javafx.scene.layout.Region
-
- javafx.scene.control.Control
-
- javafx.scene.control.Labeled
-
- javafx.scene.control.Cell<T>
Параметры типа:
T - Тип элемента, содержащегося в ячейке.
Все реализованные интерфейсы:
Прямые известные подклассы:
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 ячейки. Несмотря на название, графикой может быть любой объект Node, и он будет полностью интерактивным. Например, ячейка списка может быть настроена с 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, которую следует использовать. Если фабрика ячеек не предоставлена, будет использоваться встроенная реализация по умолчанию.
Реализация фабрики ячеек отвечает не только за создание экземпляра 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 для Cell и подклассов Cell.
Конечно, мы также можем использовать 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 на WHITE, вы можете сделать следующее в 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 добавляет два других состояния псевдокласса: "нечётный" и "чётный". Используя это, вы можете получить чередование строк, сделав что-то вроде этого в своём 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 для 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(), для этой ячейки ничего не произойдет.
- Если индекс редактирования совпадает с индексом ячейки, на этой ячейке будет вызван
С:
JavaFX 2.0
-
Краткое описание свойств
Все методыМетоды экземпляровКонкретные методы Тип Свойство и описание BooleanPropertyeditableСвойство, представляющее, разрешено ли устанавливать данную ячейку в режим редактирования.ReadOnlyBooleanPropertyeditingСвойство, представляющее, находится ли данная ячейка в режиме редактирования.ReadOnlyBooleanPropertyemptyСвойство, используемое для представления наличия содержимого в ячейке.ObjectProperty<T>itemЗначение данных, связанное с данной ячейкой.ReadOnlyBooleanPropertyselectedУказывает, выбрана ли данная ячейка.-
Свойства, унаследованные от класса 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, visible
-
-
Краткое описание полей
-
Поля, унаследованные от класса javafx.scene.layout.Region
USE_COMPUTED_SIZE, USE_PREF_SIZE
-
Поля, унаследованные от класса javafx.scene.Node
BASELINE_OFFSET_SAME_AS_HEIGHT
-
-
Краткое описание конструкторов
Конструкторы Конструктор и описание Cell()Создаёт ячейку по умолчанию со стилем класса 'cell' по умолчанию.
-
Краткое описание методов
Все методыМетоды экземпляровКонкретные методы Модификатор и тип Метод и описание voidcancelEdit()Вызовите эту функцию для перехода из режима редактирования в режим нередактирования, не сохраняя входные данные пользователя.voidcommitEdit(T newValue)Вызовите эту функцию при необходимости (в зависимости от требований взаимодействия пользователя с вашим интерфейсом редактирования ячеек) для выполнения двух задач: отправки соответствующих событий обратно контроллеру базового UI (например,BooleanPropertyeditableProperty()Свойство, представляющее, разрешено ли устанавливать данную ячейку в режим редактирования.ReadOnlyBooleanPropertyeditingProperty()Свойство, представляющее, находится ли данная ячейка в режиме редактирования.ReadOnlyBooleanPropertyemptyProperty()Свойство, используемое для представления наличия содержимого в ячейке.TgetItem()Возвращает значение данных, связанное с данной ячейкой.booleanisEditable()Возвращает, разрешено ли устанавливать данную ячейку в режим редактирования.booleanisEditing()Представляет, находится ли ячейка в режиме редактирования или нет.booleanisEmpty()Возвращает логическое значение, представляющее, считается ли ячейка пустой.protected booleanisItemChanged(T oldItem, T newItem)Этот метод вызывается подклассами Cell, чтобы определенные действия, требующие больших вычислений (в частности, вызовupdateItem(Object, boolean)) выполнялись только при необходимости (то есть они выполняются только тогда, когда текущее установленноеitemотличается от предлагаемого нового элемента, который может быть установлен).booleanisSelected()Возвращает, выбрана ли данная ячейка.ObjectProperty<T>itemProperty()Значение данных, связанное с данной ячейкой.ReadOnlyBooleanPropertyselectedProperty()Указывает, выбрана ли данная ячейка.voidsetEditable(boolean value)Разрешает определённым ячейкам быть нередактируемыми.voidsetItem(T value)Устанавливает элемент в указанное значение – не следует вызывать напрямую, так как элемент управляется виртуализированным управлением.voidstartEdit()Вызовите эту функцию для перехода из состояния «нередактирование» в состояние «редактирование», если ячейка редактируема.protected voidupdateItem(T item, boolean empty)Метод updateItem не должен вызываться разработчиками, но это лучший метод для переопределения разработчиками, чтобы они могли настроить внешний вид ячейки.voidupdateSelected(boolean selected)Обновляет, находится ли данная ячейка в состоянии выбора или нет.-
Методы, унаследованные от класса javafx.scene.control.Labeled
alignmentProperty, contentDisplayProperty, ellipsisStringProperty, fontProperty, getAlignment, getClassCssMetaData, getContentBias, getContentDisplay, getControlCssMetaData, getEllipsisString, getFont, getGraphic, getGraphicTextGap, 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, toString, underlineProperty, wrapTextProperty
-
Методы, унаследованные от класса javafx.scene.control.Control
computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, createDefaultSkin, executeAccessibleAction, getBaselineOffset, getContextMenu, getCssMetaData, getSkin, getTooltip, isResizable, layoutChildren, queryAccessibleAttribute, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
-
Методы, унаследованные от класса javafx.scene.layout.Region
backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, 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, snapSize, snapSpace, snapToPixelProperty, widthProperty
-
Методы, унаследованные от класса javafx.scene.Parent
getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, 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, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, 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, 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, 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, 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, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, translateXProperty, translateYProperty, translateZProperty, usesMirroring, visibleProperty
-
-
Подробное описание свойства
-
item
public final ObjectProperty<T> itemProperty
Значение данных, связанное с этой ячейкой. Это значение устанавливается виртуализированным элементом управления при создании или обновлении ячейки. Оно представляет собой исходное значение данных.Это значение должно устанавливаться только в подклассах ячейки виртуализированными элементами управления пользовательским интерфейсом, которые знают, как правильно работать с классом ячейки.
-
empty
public final ReadOnlyBooleanProperty emptyProperty
Свойство, используемое для представления наличия содержимого в ячейке. Если оно истинно, ячейка не содержит данных и не связана с каким-либо элементом данных в виртуализированном элементе управления.Когда ячейка пуста, ее можно стилизовать иначе с помощью псевдокласса состояния CSS 'empty'. Например, она может не получать выделение альтернативной строки или не получать заполнение фоном при наведении курсора.
См. также:
-
selected
public final ReadOnlyBooleanProperty selectedProperty
Указывает, выбрана ли эта ячейка. Например, ListView определяет одну или несколько ячеек как "выбранные".См. также:
-
editing
public final ReadOnlyBooleanProperty editingProperty
Свойство, представляющее, находится ли эта ячейка в состоянии редактирования.См. также:
-
editable
public final BooleanProperty editableProperty
Свойство, представляющее, разрешено ли вводить эту ячейку в состояние редактирования. По умолчанию editable устанавливается в true для ячеек (хотя для подкласса ячейки, чтобы ему было разрешено переходить в состояние редактирования, могут потребоваться дополнительные критерии. Например, ListCell требует, чтобы свойство ListVieweditableтакже было истинным).См. также:
-
-
Подробное описание конструкторов
-
Cell
public Cell()
Создает ячейку по умолчанию со стилем по умолчанию 'cell'.
-
-
Подробное описание методов
-
itemProperty
public final ObjectProperty<T> itemProperty()
Значение данных, связанное с этой ячейкой. Это значение устанавливается виртуализированным элементом управления при создании или обновлении ячейки. Оно представляет собой исходное значение данных.Это значение должно устанавливаться только в подклассах ячейки виртуализированными элементами управления пользовательским интерфейсом, которые знают, как правильно работать с классом ячейки.
-
setItem
public final void setItem(T value)
Устанавливает значение item - не следует вызывать напрямую, так как item управляется виртуализированным элементом управления.
-
getItem
public final T getItem()
Возвращает значение данных, связанное с этой ячейкой.
-
emptyProperty
public final ReadOnlyBooleanProperty emptyProperty()
Свойство, используемое для представления наличия содержимого в ячейке. Если оно истинно, ячейка не содержит данных и не связана с каким-либо элементом данных в виртуализированном элементе управления.Когда ячейка пуста, ее можно стилизовать иначе с помощью псевдокласса состояния CSS 'empty'. Например, она может не получать выделение альтернативной строки или не получать заполнение фоном при наведении курсора.
См. также:
-
isEmpty
public final boolean isEmpty()
Возвращает логическое значение, представляющее, считается ли ячейка пустой.
-
selectedProperty
public final ReadOnlyBooleanProperty selectedProperty()
Указывает, выбрана ли эта ячейка. Например, ListView определяет одну или несколько ячеек как "выбранные".См. также:
-
isSelected
public final boolean isSelected()
Возвращает, выбрана ли эта ячейка в данный момент.Возвращает:
Истина, если ячейка выбрана, ложь в противном случае.
-
isEditing
public final boolean isEditing()
Представляет, находится ли ячейка в состоянии редактирования в данный момент.
-
editingProperty
public final ReadOnlyBooleanProperty editingProperty()
Свойство, представляющее, находится ли эта ячейка в состоянии редактирования.См. также:
-
setEditable
public final void setEditable(boolean value)
Разрешает или запрещает редактирование определенных ячеек. Это полезно в случаях, когда, например, у списка есть "строки заголовка" — нет смысла, чтобы строки заголовка были редактируемыми, поэтому для них следует установить editable в false.Параметры:
value- Логическое значение, представляющее, является ли ячейка редактируемой. Если true, ячейка редактируемая, если false, ячейка не редактируемая.
-
isEditable
public final boolean isEditable()
Возвращает, разрешено ли вводить эту ячейку в состояние редактирования.
-
editableProperty
public final BooleanProperty editableProperty()
Свойство, представляющее, разрешено ли вводить эту ячейку в состояние редактирования. По умолчанию editable устанавливается в true для ячеек (хотя для подкласса ячейки, чтобы ему было разрешено переходить в состояние редактирования, могут потребоваться дополнительные критерии. Например, ListCell требует, чтобы свойство ListVieweditableтакже было истинным).См. также:
-
startEdit
public void startEdit()
Вызовите эту функцию, чтобы перейти из состояния, не являющегося редактированием, в состояние редактирования, если ячейка редактируема. Если эта ячейка уже находится в состоянии редактирования, она останется в нем.
-
cancelEdit
public void cancelEdit()
Вызовите эту функцию, чтобы перейти из состояния редактирования в состояние, не являющееся редактированием, без сохранения пользовательского ввода.
-
commitEdit
public void commitEdit(T newValue)
Вызовите эту функцию при необходимости (в зависимости от требований пользовательского интерфейса редактирования вашей ячейки) для выполнения двух действий:- Отправка соответствующих событий обратно в элемент управления базового пользовательского интерфейса (например,
ListView). Это запустит процесс внесения этого изменения в соответствующий источник данных/свойство (хотя это не гарантирует, что это будет выполнено успешно — это зависит от используемого конкретного обработчика сохранения изменения). Для получения более подробной информации см. javadoc класса элемента управления пользовательским интерфейсом. - Начните переход из состояния редактирования в состояние, не являющееся редактированием.
Как правило, нет необходимости переопределять этот метод в реализациях пользовательских ячеек — достаточно просто вызвать этот метод при необходимости (например, когда пользователь нажимает Enter, вы можете сделать что-то вроде
cell.commitEdit(converter.fromString(textField.getText()));).Параметры:
newValue- Значение, введенное конечным пользователем, которое следует сохранить соответствующим образом, учитывая источник данных, лежащий в основе пользовательского интерфейса, и обработчик сохранения изменения редактирования элемента управления пользовательским интерфейсом. - Отправка соответствующих событий обратно в элемент управления базового пользовательского интерфейса (например,
-
updateItem
protected void updateItem(T item, boolean empty)Метод updateItem не должен вызываться разработчиками, но это лучший метод для разработчиков, чтобы переопределить его, чтобы позволить им настроить визуальные элементы ячейки. Для уточнения, разработчики никогда не должны вызывать этот метод в своем коде (они должны позволить элементу управления пользовательским интерфейсом, например элементу управленияListView, вызвать этот метод). Однако цель метода updateItem заключается в том, чтобы разработчики, при указании пользовательских фабрик ячеек (опять же, как у ListViewcell factory), могли переопределить метод updateItem, чтобы полностью настроить ячейку.Крайне важно, чтобы подклассы ячейки правильно переопределяли метод 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. Если мы этого не сделаем, почти гарантированно, что конечные пользователи увидят графические артефакты в ячейках неожиданно.
Параметры:
item- Новый элемент для ячейки.
-
updateSelected
public void updateSelected(boolean selected)
Обновляет, находится ли эта ячейка в выбранном состоянии.Параметры:
selected- нужно ли выбрать эту ячейку.
-
isItemChanged
protected boolean isItemChanged(T oldItem, T newItem)Этот метод вызывается подклассами ячейки, чтобы определенные действия с интенсивным использованием процессора (в частности, вызовupdateItem(Object, boolean)) выполнялись только при необходимости (то есть, они выполняются только тогда, когда текущее установленное значениеitemотличается от предлагаемого нового элемента, который можно установить).По умолчанию этот метод проверяет равенство, но разработчики могут переопределить этот метод, чтобы выполнить проверки другими способами, специфичными для их области.
Параметры:
oldItem- Текущий установленный элемент, содержащийся в ячейке (т.е. он такой же, как доступен черезgetItem()).Возвращает:
Возвращает true, если новый элемент считается отличным от старого элемента. По умолчанию этот метод проверяет равенство, но подклассы могут изменить реализацию, чтобы проверить, соответствующие их потребностям.
С момента:
JavaFX 8u40
-
© 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.