Class SJTree
- All Implemented Interfaces:
com.vaadin.flow.component.AttachNotifier, com.vaadin.flow.component.BlurNotifier<com.vaadin.flow.component.grid.Grid<Object>>, com.vaadin.flow.component.DetachNotifier, com.vaadin.flow.component.Focusable<com.vaadin.flow.component.grid.Grid<Object>>, com.vaadin.flow.component.FocusNotifier<com.vaadin.flow.component.grid.Grid<Object>>, com.vaadin.flow.component.HasElement, com.vaadin.flow.component.HasEnabled, com.vaadin.flow.component.HasSize, com.vaadin.flow.component.HasStyle, com.vaadin.flow.component.HasTheme, com.vaadin.flow.data.event.SortEvent.SortNotifier<com.vaadin.flow.component.grid.Grid<Object>, com.vaadin.flow.component.grid.GridSortOrder<Object>>, com.vaadin.flow.data.provider.HasDataGenerators<Object>, com.vaadin.flow.data.provider.HasDataView<Object, Void, com.vaadin.flow.component.grid.dataview.GridDataView<Object>>, com.vaadin.flow.data.provider.HasLazyDataView<Object, Void, com.vaadin.flow.component.grid.dataview.GridLazyDataView<Object>>, com.vaadin.flow.data.provider.HasListDataView<Object, com.vaadin.flow.component.grid.dataview.GridListDataView<Object>>, com.vaadin.flow.data.provider.hierarchy.HasHierarchicalDataProvider<Object>, ComponentMixin, ContainerMixin, JComponentMixin, Serializable, EventListener, TreeModelListener, TreeSelectionListener
public class SJTree
extends com.vaadin.flow.component.treegrid.TreeGrid<Object>
implements JComponentMixin, TreeModelListener, TreeSelectionListener
Surrogate for
JTree (SD_sjtree). Extends Vaadin
TreeGrid<Object> — the JDK TreeModel's node
objects are the Vaadin items, the installed model is the single source of
truth (R_swing_is_truth), and a custom lazy AbstractBackEndHierarchicalDataProvider
reads getRoot/getChild/getChildCount/isLeaf
live (children fetched only when a node expands). The third Grid-family
surrogate after SJTable (SD_sjtable) and SJList (SD_sjlist).
Node-Object identity (SD_sjtree_node_identity)
Items are keyed on the model's node objects directly — JDK'sTreeModel contract is node-as-Object, and the
SJTable/SJList Integer-index dodge can't transfer (a hierarchical
provider must navigate parent⇄child; a flat index is unstable under
expand/collapse). DefaultMutableTreeNode doesn't override
equals, so the dominant case is identity-keyed. Accepted R_best_effort_behaviour
limitation: a custom model returning value-equals nodes (the
same String at two positions) collides in Vaadin's key-mapper;
documented, not defended.
Parent map (SD_sjtree_lazy_provider)
EveryfetchChildrenFromBackEnd records child→parent in an
identity map. Not an R_vaadin_first shadow cache: the data provider's
getParent/getItemIndex overrides (required by
TreeGrid.scrollToItem(T) for a non-in-memory provider) and the
selection bridge's node→TreePath reconstruction both need to walk
up, and the JDK TreeModel has no getParent.
Selection bridge (SD_sjtree_selection_bridge)
JDKTreeSelectionModel is path-set–based, Grid selection is
item-set–based. SJTree IS-A TreeSelectionListener on the
installed model (JDK→peer push); a Vaadin selection listener reconstructs
TreePaths via the parent map and writes through
setSelectionPaths (peer→JDK), both guarded by
preventPeerEvents. getSelectionModel() clashes with the
inherited Grid.getSelectionModel(): GridSelectionModel —
exactly SJTable's clash — so the JDK-shaped accessor here is
getTreeSelectionModel(); the emulator keeps the JDK name. Mode
changes are observed via the model's "selectionMode" PCE (JDK code
calls tree.getSelectionModel().setSelectionMode(...) — there is no
JTree.setSelectionMode).
Hierarchy-column render seam (SD_sjtree_hierarchy_render)
OneaddComponentHierarchyColumn installs at ctor time; its closure
reads TreeStateStore.componentProvider live. TreeGrid's
expand/collapse toggle chrome lives in
HierarchyColumnComponentRenderer's template, so the renderer is
never re-installed — the emulator's D_jtree_renderer_registry JDK-TreeCellRenderer
bridge swaps the function via setHierarchyComponentProvider(Function).
Pure-surrogate users get a fresh-per-call Span of the node's text
(D_jcombobox DOM-adoption guard).
R_vaadin_first drop-and-WARN surface
addTreeWillExpandListener (no Vaadin pre-expansion vetoable hook —
D_gap_severity_triage sub-bucket (a)); in-cell editing (sub-bucket (b), the JTable
cell-editor precedent). Round-trip-only knobs (showsRootHandles,
rowHeight, toggleClickCount, …) live emulator-side per the
asymmetric R_swing_is_truth-shadow split (SD_sjtoolbar/SD_sjsplitpane/SD_sjlist) and aren't present here at all.- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from class com.vaadin.flow.component.grid.Grid
com.vaadin.flow.component.grid.Grid.AbstractGridExtension<T>, com.vaadin.flow.component.grid.Grid.Column<T>, com.vaadin.flow.component.grid.Grid.DataCommunicatorBuilder<T,U>, com.vaadin.flow.component.grid.Grid.MultiSortPriority, com.vaadin.flow.component.grid.Grid.NestedNullBehavior, com.vaadin.flow.component.grid.Grid.SelectionMode, com.vaadin.flow.component.grid.Grid.SpringData, com.vaadin.flow.component.grid.Grid.UpdateQueue Nested classes/interfaces inherited from interface com.vaadin.flow.component.BlurNotifier
com.vaadin.flow.component.BlurNotifier.BlurEvent<C>Nested classes/interfaces inherited from interface com.vaadin.flow.component.FocusNotifier
com.vaadin.flow.component.FocusNotifier.FocusEvent<C>Nested classes/interfaces inherited from interface JComponentMixin
JComponentMixin.ActionStandin -
Field Summary
Fields inherited from interface JComponentMixin
TOOL_TIP_TEXT_KEY, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidOverrides the inheritedComponentMixinwire — TreeGrid dispatches item clicks (carrying the node), not generic component clicks.voidaddSelectionPath(TreePath path) voidPer-registration TreeExpansion wire: one Vaadin expand + one collapse subscription per Swing listener, combined into oneRegistration(R_vaadin_first's per-registration shape).voidR_vaadin_first drop-and-WARN — D_gap_severity_triage sub-bucket (a) blocked-upstream: Vaadin has no pre-expansion vetoable hook, so the listener would never fire.voidvoidcollapsePath(TreePath path) Collapses the node atpath(ancestors stay as-is, JDK shape).convertValueToText(Object node) Node-to-text conversion for the default render path.protected TreeSelectionModelvoidexpandPath(TreePath path) Ensures the node atpathis expanded and its ancestors are too (JDK shape).getClosestPathForLocation(int x, int y) Same stash answer — we have no "closest" notion without pixels (R_layouts_close_enough).intgetClosestRowForLocation(int x, int y) getExpandedDescendants(TreePath parent) Expanded descendants ofparent(includingparentitself, JDK shape);nullwhenparentisn't expanded.getModel()getPathForLocation(int x, int y) Path twin ofgetRowForLocation(int, int).getPathForNode(Object node) Reconstruct the full JDKTreePath(always rooted at the model root, even whenrootVisibleis false) for a node.getPathForRow(int row) intintgetRowForLocation(int x, int y) Returns the visible-row index currently being click-dispatched (stashed byaddMouseListener(SMouseListener)'s item-click wire), or-1outside a dispatch.intgetRowForNode(Object node) Visible-row index of a node by identity; -1 when not visible.intgetRowForPath(TreePath path) -1 when an ancestor is collapsed (the node isn't visible).intTreePath[]JDKgetSelectionModel(): TreeSelectionModelcan't coexist with Vaadin Grid's inheritedgetSelectionModel(): GridSelectionModel<T>(unrelated return types).Deliberate no-op — L&F key.booleanisCollapsed(TreePath path) booleanisExpanded(TreePath path) JDK contract: true only when the node is expanded and every ancestor is expanded (i.e. the expansion is actually displayed).booleanisPathSelected(TreePath path) booleanbooleanbooleanTrue when every ancestor ofpathis expanded.voidmakeVisible(TreePath path) Expands the path's ancestors so the node itself is displayable.voidremoveSelectionPath(TreePath path) voidvoidvoidscrollPathToVisible(TreePath path) Expand ancestors (via the publicexpand(), firing the JDKTreeExpansionEventfan-out) thenTreeGrid.scrollToItem(T)— D_jtree_row_path_bridge:scrollToItem's own built-in ancestor expansion fires noExpandEventand would silently skip listeners.voidsetHierarchyComponentProvider(Function<Object, com.vaadin.flow.component.Component> provider) Swap the hierarchy-column's per-node component factory.voidvoidsetRootVisible(boolean rootVisible) falsehides the model root: its children become Vaadin top-level items.voidsetSelectionModel(TreeSelectionModel selectionModel) Install a different selection model.voidsetSelectionPath(TreePath path) voidsetSelectionPaths(TreePath[] paths) voidvoidvoidvoidvoidJDK→peer push: the installedTreeSelectionModelchanged.Methods inherited from class com.vaadin.flow.component.treegrid.TreeGrid
addCollapseListener, addComponentHierarchyColumn, addExpandListener, addHierarchyColumn, collapse, collapse, collapse, collapseRecursively, collapseRecursively, expand, expand, expand, expandRecursively, expandRecursively, getDataCommunicator, getDataProvider, getGenericDataView, getItemsWithChildrenRecursively, getLazyDataView, getListDataView, initConnector, isExpanded, refreshViewport, scrollToEnd, scrollToIndex, scrollToIndex, scrollToItem, setColumns, setDataProvider, setDataProvider, setHierarchyColumn, setHierarchyColumn, setItems, setItems, setItems, setItems, setItems, setUniqueKeyDataGeneratorMethods inherited from class com.vaadin.flow.component.grid.Grid
addCellFocusListener, addColumn, addColumn, addColumn, addColumn, addColumn, addColumn, addColumn, addColumnReorderListener, addColumnResizeListener, addColumns, addComponentColumn, addContextMenu, addDataGenerator, addDragEndListener, addDragStartListener, addDropListener, addFirstHeaderRow, addItemClickListener, addItemDoubleClickListener, addSelectionListener, addSortListener, addThemeVariants, addValueProvider, appendFooterRow, appendHeaderRow, asMultiSelect, asSingleSelect, compareMaybeComparables, configureBeanType, createColumn, createColumnId, createDataCommunicator, createDefaultArrayUpdater, createEditor, createSortingComparator, deselect, deselectAll, getAriaLabel, getArrayUpdater, getBeanType, getColumnByInternalId, getColumnByKey, getColumnLayers, getColumnRendering, getColumns, getCompositeDataGenerator, getDefaultColumnFactory, getDefaultHeaderRow, getDragFilter, getDropFilter, getDropMode, getEditor, getEmptyStateComponent, getEmptyStateText, getFooterRows, getHeaderRows, getI18n, getNestedNullBehavior, getPageSize, getPartNameGenerator, getPropertySet, getSelectedItems, getSelectionMode, getSelectionModel, getSelectionPreservationMode, getSortOrder, getTooltipPosition, getUniqueKeyProperty, getUniqueKeyProvider, insertColumnLayer, isAllRowsVisible, isColumnReorderingAllowed, isDetailsVisible, isDetailsVisibleOnClick, isMultiSort, isRowsDraggable, isTooltipMarkdownEnabled, onAttach, onDataProviderChange, onDetach, onEnabledStateChanged, prependFooterRow, prependHeaderRow, recalculateColumnWidths, removeAllColumns, removeAllFooterRows, removeAllHeaderRows, removeColumn, removeColumnByKey, removeColumnLayer, removeColumns, removeFooterRow, removeHeaderRow, removeThemeVariants, scheduleScrollExecution, scrollToColumn, scrollToColumn, scrollToStart, select, setAllRowsVisible, setAriaLabel, setColumnKey, setColumnOrder, setColumnOrder, setColumnRendering, setColumnReorderingAllowed, setColumns, setDefaultMultiSortPriority, setDetailsVisible, setDetailsVisibleOnClick, setDragDataGenerator, setDragFilter, setDropFilter, setDropMode, setEmptyStateComponent, setEmptyStateText, setI18n, setItemDetailsRenderer, setItems, setItems, setItemSelectableProvider, setItemsPageable, setItemsPageable, setMultiSort, setMultiSort, setMultiSort, setMultiSort, setNestedNullBehavior, setPageSize, setPartNameGenerator, setRowsDraggable, setSelectionDragDetails, setSelectionMode, setSelectionModel, setSelectionPreservationMode, setSortableColumns, setTooltipGenerator, setTooltipMarkdownEnabled, setTooltipPosition, setUniqueKeyProperty, setUniqueKeyProvider, sort, updateSelectionModeOnClientMethods inherited from class com.vaadin.flow.component.Component
addListener, bindVisible, findAncestor, fireEvent, from, get, getChildren, getElement, getEventBus, getId, getListeners, getLocale, getParent, getTestId, getTranslation, getTranslation, getTranslation, getTranslation, getTranslation, getTranslation, getUI, hasListener, isAttached, isTemplateMapped, isVisible, removeFromParent, scrollIntoView, scrollIntoView, set, setElement, setId, setTestId, setVisible, whenAttachedMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface com.vaadin.flow.component.AttachNotifier
addAttachListenerMethods inherited from interface com.vaadin.flow.component.BlurNotifier
addBlurListenerMethods inherited from interface ComponentMixin
_installSwingClass, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseMotionListener, addMouseWheelListener, addNotify, addPropertyChangeListener, addPropertyChangeListener, dispatchEvent, doLayout, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getComponentListeners, getCursor, getFocusListeners, getFont, getForeground, getGraphics, getHierarchyBoundsListeners, getHierarchyListeners, getKeyListeners, getLocation, getMaximumSize, getMinimumSize, getMouseListeners, getName, getPreferredSize, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolTipText, getX, getY, grabFocus, hasFocus, invalidate, isDisplayable, isFocusable, isFocusOwner, isShowing, paint, paintAll, print, printAll, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removeNotify, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, revalidate, setBackground, setBounds, setBounds, setCursor, setFocusable, setFont, setForeground, setLocation, setLocation, setMaximumSize, setMinimumSize, setName, setPreferredSize, setSize, setSize, transferFocus, transferFocusBackward, transferFocusUpCycle, update, validateMethods inherited from interface ContainerMixin
addContainerListener, getContainerListeners, getLayout, paintComponents, printComponents, removeContainerListener, setLayoutMethods inherited from interface com.vaadin.flow.component.DetachNotifier
addDetachListenerMethods inherited from interface com.vaadin.flow.component.Focusable
addFocusShortcut, blur, focus, focus, getTabIndex, setTabIndexMethods inherited from interface com.vaadin.flow.component.FocusNotifier
addFocusListenerMethods inherited from interface com.vaadin.flow.component.HasElement
getElementMethods inherited from interface com.vaadin.flow.component.HasEnabled
bindEnabled, isEnabledMethods inherited from interface com.vaadin.flow.data.provider.hierarchy.HasHierarchicalDataProvider
getTreeData, setItems, setItems, setTreeDataMethods inherited from interface com.vaadin.flow.data.provider.HasLazyDataView
setItemsMethods inherited from interface com.vaadin.flow.component.HasSize
bindHeight, bindWidth, getHeight, getHeightUnit, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getWidth, getWidthUnit, setHeight, setHeight, setHeightFull, setMaxHeight, setMaxHeight, setMaxWidth, setMaxWidth, setMinHeight, setMinHeight, setMinWidth, setMinWidth, setSizeFull, setSizeUndefined, setWidth, setWidth, setWidthFullMethods inherited from interface com.vaadin.flow.component.HasStyle
addClassName, addClassNames, bindClassName, bindClassNames, getClassName, getClassNames, getStyle, hasClassName, removeClassName, removeClassNames, setClassName, setClassNameMethods inherited from interface com.vaadin.flow.component.HasTheme
addThemeName, addThemeNames, bindThemeName, bindThemeNames, getThemeName, getThemeNames, hasThemeName, removeThemeName, removeThemeNames, setThemeName, setThemeNameMethods inherited from interface JComponentMixin
addAncestorListener, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getLocation, getNextFocusableComponent, getPopupLocation, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, isDoubleBuffered, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paintImmediately, paintImmediately, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeVetoableChangeListener, requestDefaultFocus, resetKeyboardActions, reshape, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setInheritsPopupMenu, setInputMap, setInputVerifier, setNextFocusableComponent, setOpaque, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, unregisterKeyboardAction, updateUI
-
Constructor Details
-
SJTree
public SJTree()Pure-surrogate convenience: a single empty root, hidden. -
SJTree
-
-
Method Details
-
createDefaultSelectionModel
-
getModel
-
setModel
-
isRootVisible
public boolean isRootVisible() -
setRootVisible
public void setRootVisible(boolean rootVisible) falsehides the model root: its children become Vaadin top-level items. The onlyrootVisiblebehaviour reproduced (R_best_effort_behaviour) — the root-handle-on-top-level nuance issetShowsRootHandles, an emulator-side visual shadow per D_jtree_field_shadows. -
setHierarchyComponentProvider
public void setHierarchyComponentProvider(Function<Object, com.vaadin.flow.component.Component> provider) Swap the hierarchy-column's per-node component factory. The installed column closure reads the function live, so no Vaadin renderer re-installs — TreeGrid's expand/collapse toggle chrome survives. The emulator's JDK-TreeCellRendererbridge (D_jtree_renderer_registry) is the canonical caller; stage-3 users may install their own factory directly. -
convertValueToText
-
getPathForNode
-
treeNodesChanged
- Specified by:
treeNodesChangedin interfaceTreeModelListener
-
treeNodesInserted
- Specified by:
treeNodesInsertedin interfaceTreeModelListener
-
treeNodesRemoved
- Specified by:
treeNodesRemovedin interfaceTreeModelListener
-
treeStructureChanged
- Specified by:
treeStructureChangedin interfaceTreeModelListener
-
getTreeSelectionModel
JDKgetSelectionModel(): TreeSelectionModelcan't coexist with Vaadin Grid's inheritedgetSelectionModel(): GridSelectionModel<T>(unrelated return types). Per R_vaadin_first the Vaadin shape wins at the surrogate; the emulator (:emulators.JTree) keeps the JDK-shaped getter and reaches the model through this differently-named accessor. Same resolution SJTable / SJList use. -
setSelectionModel
Install a different selection model.nullinstalls a freshDefaultTreeSelectionModel(R_best_effort_behaviour close-enough for the JDK'sEmptySelectionModelsubstitution). -
valueChanged
JDK→peer push: the installedTreeSelectionModelchanged.- Specified by:
valueChangedin interfaceTreeSelectionListener
-
setSelectionPath
-
setSelectionPaths
-
addSelectionPath
-
removeSelectionPath
-
getSelectionPath
-
getSelectionPaths
-
getSelectionCount
public int getSelectionCount() -
isPathSelected
-
isSelectionEmpty
public boolean isSelectionEmpty() -
clearSelection
public void clearSelection() -
getLastSelectedPathComponent
-
expandPath
Ensures the node atpathis expanded and its ancestors are too (JDK shape). -
collapsePath
Collapses the node atpath(ancestors stay as-is, JDK shape). -
isExpanded
JDK contract: true only when the node is expanded and every ancestor is expanded (i.e. the expansion is actually displayed). -
isCollapsed
-
makeVisible
Expands the path's ancestors so the node itself is displayable. -
isVisible
True when every ancestor ofpathis expanded. -
scrollPathToVisible
Expand ancestors (via the publicexpand(), firing the JDKTreeExpansionEventfan-out) thenTreeGrid.scrollToItem(T)— D_jtree_row_path_bridge:scrollToItem's own built-in ancestor expansion fires noExpandEventand would silently skip listeners. No pixel scroll guarantee (R_layouts_close_enough). -
getExpandedDescendants
-
addTreeExpansionListener
Per-registration TreeExpansion wire: one Vaadin expand + one collapse subscription per Swing listener, combined into oneRegistration(R_vaadin_first's per-registration shape). Fires for both client and programmatic expands — matching JDK'sexpandPathfiring semantics. -
removeTreeExpansionListener
-
getTreeExpansionListeners
-
addTreeWillExpandListener
R_vaadin_first drop-and-WARN — D_gap_severity_triage sub-bucket (a) blocked-upstream: Vaadin has no pre-expansion vetoable hook, so the listener would never fire. The emulator owns expansion and fires it (D_jtree_row_path_bridge); here it drops. -
removeTreeWillExpandListener
-
getRowCount
public int getRowCount() -
getPathForRow
-
getRowForPath
-1 when an ancestor is collapsed (the node isn't visible). -
getRowForNode
Visible-row index of a node by identity; -1 when not visible. -
getRowForLocation
public int getRowForLocation(int x, int y) Returns the visible-row index currently being click-dispatched (stashed byaddMouseListener(SMouseListener)'s item-click wire), or-1outside a dispatch. There is no server-side pixel→row map (R_layouts_close_enough) — called from a usermousePressed/mouseClickedhandler (theCaseTreeView.selectOnRightClickidiom) it returns the clicked row. -
getPathForLocation
Path twin ofgetRowForLocation(int, int). -
getClosestPathForLocation
Same stash answer — we have no "closest" notion without pixels (R_layouts_close_enough). -
getClosestRowForLocation
public int getClosestRowForLocation(int x, int y) -
addMouseListener
Overrides the inheritedComponentMixinwire — TreeGrid dispatches item clicks (carrying the node), not generic component clicks. Each item-click dispatches theMOUSE_PRESSED→MOUSE_RELEASED→MOUSE_CLICKEDsequence (best-effort R_best_effort_behaviour: the browser reports a click, not the raw press/release stream), carrying the browser button so right-click →SMouseEvent.isPopupTrigger().popupTriggeris set on both press and release for a right-click — we can't know the host platform's convention, and firing on both serves listeners written for either (theCaseTreeView.selectOnRightClickidiom listens on both; the duplicate select is idempotent). The clicked node + its visible row are stashed around the fan-out forgetRowForLocation(int, int)/getPathForLocation(int, int).- Specified by:
addMouseListenerin interfaceComponentMixin
-
getUIClassID
Description copied from interface:JComponentMixinDeliberate no-op — L&F key.- Specified by:
getUIClassIDin interfaceJComponentMixin
-