Spec-Zone .ru
спецификации, руководства, описания, API
|
T
- Тип элемента содержится в пределах Ячейки.public class Cell<T> extends Labeled
ListView
, TreeView
, и TableView
. Ячейка является Labeled
Control
, и используется, чтобы представить единственную "строку" в ListView, TreeView или TableView. Ячейки также используются для каждой отдельной 'ячейки' в TableView (то есть каждое пересечение строки/столбца). См. JavaDoc для каждого управления отдельно для большего количества детали. Каждая Ячейка связывается с единственным элементом данных (представленный item
свойство). Ячейка ответственна за рендеринг того элемента и, где необходимо, за редактирование элемента. Элемент в пределах Ячейки может быть представлен текстом или некоторым другим управлением, таким как a CheckBox
, ChoiceBox
или любой другой Node
такой как a HBox
, GridPane
, или даже a Rectangle
.
Поскольку TreeView, ListView, TableView и другие такие средства управления могут потенциально использоваться для того, чтобы вывести на экран невероятно большие объемы данных, не выполнимо создать фактическую Ячейку для каждого отдельного элемента в управлении. Мы представляем чрезвычайно большие наборы данных, используя только очень немного Ячеек. Каждая Ячейка "перерабатывается", или снова используется. Это - то, что мы имеем в виду, когда мы говорим, что эти средства управления виртуализируются.
Так как Ячейкой является Управление, это - по существу "модель". Его Кожа ответственна за определение взгляда и расположения, в то время как Поведение ответственно за то, что обработало все входные события и использовало ту информацию, чтобы изменить состояние Управления. Кроме того, Ячейка разрабатывается из CSS точно так же как любое другое Управление. Однако, не необходимо реализовать Кожу для большинства использования Ячейки. Это - то, потому что фабрика ячейки может быть установлена - это детализируется более коротко.
Поскольку безусловно случай наиболее популярного способа использования для ячеек должен показать текст пользователю, этот вариант использования особенно оптимизируется для в пределах Ячейки. Это делается Ячейкой, расширяющейся от Labeled
. Это означает, что подклассы Ячейки должны только установить text
свойство, вместо того, чтобы создать отдельное Label
и набор это в пределах Ячейки. Однако, для ситуаций, где что-то большее чем просто текст требуется, возможно разместить любого Node
в Ячейке graphic
свойство. Несмотря на термин, графика может быть любым Узлом, и будет полностью интерактивной. Например, ListCell мог бы быть сконфигурирован с a Button
как его графика. Текст кнопки мог тогда быть связан с ячейками item
свойство. Таким образом, всякий раз, когда элемент в изменениях Ячейки, Текст кнопки автоматически обновляется.
Наборы ячеек focusTraversable ко лжи.
Фабрики ячейки
Представление значения по умолчанию Ячейки 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); } } }This class could then be used inside a ListView as such:
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(); } });In this example an anonymous inner class is created, that simply returns instances of MoneyFormatCell whenever it is called. The MoneyFormatCell class extends
ListCell
, overriding the
updateItem
method. This method
is called whenever the item in the cell changes, for example when the user
scrolls the ListView or the content of the underlying data model changes
(and the cell is reused to represent some different item in the ListView).
Because of this, there is no need to manage bindings - simply react to the
change in items when this method occurs. In the example above, whenever the
item changes, we update the cell text property, and also modify the text fill
to ensure that we get the correct visuals. In addition, if the cell is "empty"
(meaning it is used to fill out space in the ListView but doesn't have any
data associated with it), then we just use the empty String.
Note that there are additional methods prefixed with 'update' that may be of interest, so be sure to read the API documentation for Cell, and subclasses of Cell, closely.
Of course, we can also use the binding API rather than overriding the 'update' methods. Shown below is a very trivial example of how this could be achieved.
public class BoundLabelCell extends ListCell<String> { public TextFieldCell() { textProperty().bind(itemProperty()); } }
Changing the Cell's Colors
This should be extraordinarily simple in JavaFX. Each Cell can be styled directly from CSS. So for example, if you wanted to change the default background of every cell in a ListView to be WHITE you could do the following CSS:
.list-cell { -fx-padding: 3 3 3 3; -fx-background-color: white; }If you wanted to set the color of selected ListView cells to be blue, you could add this to your CSS file:
.list-cell:selected { -fx-background-color: blue; }Most Cell implementations extend from
IndexedCell
rather than Cell.
IndexedCell adds two other pseudoclass states: "odd" and "even". Using this
you can get alternate row striping by doing something like this in your CSS
file:
.list-cell:odd { -fx-background-color: grey; }Each of these examples require no code changes. Simply update your CSS file to alter the colors. You can also use the "hover" and other pseudoclasses in CSS the same as with other controls.
Another approach to the first example above (formatting a list of numbers) would
be to use style classes. Suppose you had an ObservableList
of Numbers
to display in a ListView and wanted to color all of the negative values red
and all positive or 0 values black.
One way to achieve this is with a custom cellFactory which changes the
styleClass of the Cell based on whether the value is negative or positive. This
is as simple as adding code to test if the number in the cell is negative,
and adding a "negative" styleClass. If the number is not negative, the "negative"
string should be removed. This approach allows for the colors to be defined
from CSS, allowing for simple customization. The CSS file would then include
something like the following:
.list-cell { -fx-text-fill: black; } .list-cell .negative { -fx-text-fill: red; }
Type | Property and Description |
---|---|
BooleanProperty |
доступный для редактирования
A property representing whether this cell is allowed to be put into an
editing state.
|
ReadOnlyBooleanProperty |
редактирование
Property representing whether this cell is currently in its editing state.
|
ReadOnlyBooleanProperty |
пустой
A property used to represent whether the cell has any contents.
|
ObjectProperty<T> |
элемент
The data value associated with this Cell.
|
ReadOnlyBooleanProperty |
выбранный
Indicates whether or not this cell has been selected.
|
alignment, contentDisplay, ellipsisString, font, graphic, graphicTextGap, labelPadding, mnemonicParsing, textAlignment, textFill, textOverrun, text, underline, wrapText
contextMenu, height, maxHeight, maxWidth, minHeight, minWidth, prefHeight, prefWidth, skinClassName, skin, tooltip, width
needsLayout
blendMode, boundsInLocal, boundsInParent, cacheHint, cache, clip, cursor, depthTest, disabled, disable, effect, eventDispatcher, focused, focusTraversable, hover, id, inputMethodRequests, layoutBounds, layoutX, layoutY, localToParentTransform, localToSceneTransform, managed, mouseTransparent, 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
USE_COMPUTED_SIZE, USE_PREF_SIZE
Constructor and Description |
---|
Cell()
Creates a default Cell with the default style class of 'cell'.
|
Modifier and Type | Method and Description |
---|---|
void |
cancelEdit()
Call this function to transition from an editing state into a non-editing
state, without saving any user input.
|
void |
commitEdit(T newValue)
Call this function to transition from an editing state into a non-editing
state, and in the process saving any user input.
|
BooleanProperty |
editableProperty()
A property representing whether this cell is allowed to be put into an
editing state.
|
ReadOnlyBooleanProperty |
editingProperty()
Property representing whether this cell is currently in its editing state.
|
ReadOnlyBooleanProperty |
emptyProperty()
A property used to represent whether the cell has any contents.
|
T |
getItem()
Returns the data value associated with this Cell.
|
boolean |
isEditable()
Returns whether this cell is allowed to be put into an editing state.
|
boolean |
isEditing()
Represents whether the cell is currently in its editing state or not.
|
boolean |
isEmpty()
Returns a boolean representing whether the cell is considered to be empty
or not.
|
boolean |
isSelected()
Returns whether this cell is currently selected or not.
|
ObjectProperty<T> |
itemProperty()
The data value associated with this Cell.
|
ReadOnlyBooleanProperty |
selectedProperty()
Indicates whether or not this cell has been selected.
|
void |
setEditable(boolean value)
Allows for certain cells to not be able to be edited.
|
void |
setItem(T value)
Sets the item to the given value - should not be called directly as the
item is managed by the virtualized control.
|
void |
startEdit()
Call this function to transition from a non-editing state into an editing
state, if the cell is editable.
|
protected void |
updateItem(T item,
boolean empty)
Updates the item associated with this Cell.
|
void |
updateSelected(boolean selected)
Updates whether this cell is in a selected state or not.
|
alignmentProperty, contentDisplayProperty, ellipsisStringProperty, fontProperty, getAlignment, getContentBias, getContentDisplay, getEllipsisString, getFont, getGraphic, getGraphicTextGap, getLabelPadding, getText, getTextAlignment, getTextFill, getTextOverrun, graphicProperty, graphicTextGapProperty, isMnemonicParsing, isUnderline, isWrapText, labelPaddingProperty, mnemonicParsingProperty, setAlignment, setContentDisplay, setEllipsisString, setFont, setGraphic, setGraphicTextGap, setMnemonicParsing, setText, setTextAlignment, setTextFill, setTextOverrun, setUnderline, setWrapText, textAlignmentProperty, textFillProperty, textOverrunProperty, textProperty, underlineProperty, wrapTextProperty
computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, getBaselineOffset, getContextMenu, getHeight, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getPrefHeight, getPrefWidth, getSkin, getTooltip, getUserAgentStylesheet, getWidth, heightProperty, intersects, isResizable, layoutChildren, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, setContextMenu, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setPrefHeight, setPrefSize, setPrefWidth, setSkin, setSkinClassName, setTooltip, setWidth, skinClassNameProperty, skinProperty, tooltipProperty, widthProperty
getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, setNeedsLayout
addEventFilter, addEventHandler, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getCursor, getDepthTest, getEffect, getEventDispatcher, getId, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, 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, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getUserData, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToSceneTransformProperty, lookupAll, managedProperty, mouseTransparentProperty, 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, pickOnBoundsProperty, pressedProperty, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, 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, toString, translateXProperty, translateYProperty, translateZProperty, visibleProperty
public final ObjectProperty<T> itemProperty
This value should only be set in subclasses of Cell by the virtualised user interface controls that know how to properly work with the Cell class.
getItem()
,
setItem(T)
public final ReadOnlyBooleanProperty emptyProperty
When a cell is empty, it can be styled differently via the 'empty' CSS pseudo class state. For example, it may not receive any alternate row highlighting, or it may not receive hover background fill when hovered.
isEmpty()
public final ReadOnlyBooleanProperty selectedProperty
isSelected()
public final ReadOnlyBooleanProperty editingProperty
isEditing()
public final BooleanProperty editableProperty
editable
property is also
true.isEditable()
,
setEditable(boolean)
public Cell()
public final ObjectProperty<T> itemProperty()
This value should only be set in subclasses of Cell by the virtualised user interface controls that know how to properly work with the Cell class.
getItem()
,
setItem(T)
public final void setItem(T value)
public final T getItem()
public final ReadOnlyBooleanProperty emptyProperty()
When a cell is empty, it can be styled differently via the 'empty' CSS pseudo class state. For example, it may not receive any alternate row highlighting, or it may not receive hover background fill when hovered.
isEmpty()
public final boolean isEmpty()
public final ReadOnlyBooleanProperty selectedProperty()
isSelected()
public final boolean isSelected()
public final boolean isEditing()
public final ReadOnlyBooleanProperty editingProperty()
isEditing()
public final void setEditable(boolean value)
value
- A boolean representing whether the cell is editable or not.
If true, the cell is editable, and if it is false, the cell can not
be edited.public final boolean isEditable()
public final BooleanProperty editableProperty()
editable
property is also
true.isEditable()
,
setEditable(boolean)
public void startEdit()
public void cancelEdit()
public void commitEdit(T newValue)
newValue
- The value as input by the end user, which should be
persisted in the relevant way given the data source underpinning the
user interface.protected void updateItem(T item, boolean empty)
Updates the item associated with this Cell. This method should only be called by Skin implementations of ListView, TableView, TreeView, or other controls using Cells. It is not intended to be called by application developers.
Because null
is a perfectly valid value in the application
domain, Cell needs some way to distinguish whether or not the cell
actually holds a value. The empty
flag indicates this.
It is an error to supply a non-null item
but a true value for
empty
.
item
- The new item for the cellempty
- whether or not this cell represents data from the list. If it
is empty, then it does not represent any domain data, but is a cell
being used to render an "empty" row.public void updateSelected(boolean selected)
selected
- whether or not to select this cell.Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved. Use is subject to