Class JXTreeTable.TreeTableCellRenderer

  • All Implemented Interfaces:
    java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible, javax.swing.Scrollable, javax.swing.table.TableCellRenderer
    Enclosing class:
    JXTreeTable

    static class JXTreeTable.TreeTableCellRenderer
    extends JXTree
    implements javax.swing.table.TableCellRenderer
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      private class  JXTreeTable.TreeTableCellRenderer.ClippedTreeCellRenderer  
      • Nested classes/interfaces inherited from class javax.swing.JTree

        javax.swing.JTree.AccessibleJTree, javax.swing.JTree.DropLocation, javax.swing.JTree.DynamicUtilTreeNode, javax.swing.JTree.EmptySelectionModel, javax.swing.JTree.TreeModelHandler, javax.swing.JTree.TreeSelectionRedirector
      • Nested classes/interfaces inherited from class javax.swing.JComponent

        javax.swing.JComponent.AccessibleJComponent
      • Nested classes/interfaces inherited from class java.awt.Container

        java.awt.Container.AccessibleAWTContainer
      • Nested classes/interfaces inherited from class java.awt.Component

        java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private javax.swing.border.Border cellBorder  
      private int hierarchicalColumnWidth  
      protected javax.swing.border.Border highlightBorder
      Border to draw around the tree, if this is non-null, it will be painted.
      private java.beans.PropertyChangeListener rolloverListener  
      protected JXTreeTable treeTable  
      protected int visibleRow  
      • Fields inherited from class javax.swing.JTree

        ANCHOR_SELECTION_PATH_PROPERTY, CELL_EDITOR_PROPERTY, CELL_RENDERER_PROPERTY, cellEditor, cellRenderer, editable, EDITABLE_PROPERTY, EXPANDS_SELECTED_PATHS_PROPERTY, INVOKES_STOP_CELL_EDITING_PROPERTY, invokesStopCellEditing, LARGE_MODEL_PROPERTY, largeModel, LEAD_SELECTION_PATH_PROPERTY, ROOT_VISIBLE_PROPERTY, rootVisible, ROW_HEIGHT_PROPERTY, rowHeight, SCROLLS_ON_EXPAND_PROPERTY, scrollsOnExpand, SELECTION_MODEL_PROPERTY, selectionModel, selectionRedirector, SHOWS_ROOT_HANDLES_PROPERTY, showsRootHandles, TOGGLE_CLICK_COUNT_PROPERTY, toggleClickCount, TREE_MODEL_PROPERTY, treeModel, treeModelListener, VISIBLE_ROW_COUNT_PROPERTY, visibleRowCount
      • Fields inherited from class javax.swing.JComponent

        listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
      • Fields inherited from class java.awt.Component

        accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
      • Fields inherited from interface java.awt.image.ImageObserver

        ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void bind​(JXTreeTable treeTable)
      Immutably binds this TreeTableModelAdapter to the specified JXTreeTable.
      private void bindRollover()
      Install rollover support.
      protected java.beans.PropertyChangeListener createRolloverListener()
      Creates and returns a property change listener for table's rollover related properties.
      protected RolloverProducer createRolloverProducer()
      Creates and returns the RolloverProducer to use with this tree.
      void doClick()  
      private java.beans.PropertyChangeListener getRolloverListener()  
      java.awt.Component getTableCellRendererComponent​(javax.swing.JTable table, java.lang.Object value, boolean isSelected, boolean hasFocus, int row, int column)  
      private java.lang.String getToolTipText​(java.awt.event.MouseEvent event, int row, int column)
      Hack around #297-swingx: tooltips shown at wrong row.
      boolean isRowSelected​(int row)  
      boolean isVisible()
      void paint​(java.awt.Graphics g)
      Sublcassed to translate the graphics such that the last visible row will be drawn at 0,0.
      void scrollRectToVisible​(java.awt.Rectangle aRect)  
      void setBorder​(javax.swing.border.Border border)
      void setBounds​(int x, int y, int w, int h)
      This is overridden to set the location to (0, 0) and set the dimension to exactly fill the bounds of the hierarchical column.
      protected void setExpandedState​(javax.swing.tree.TreePath path, boolean state)  
      void setRowHeight​(int rowHeight)
      Sets the row height of the tree, and forwards the row height to the table.
      void setToolTipText​(java.lang.String text)
      protected boolean shouldApplyDropHack()
      Returns a boolean indicating whether the drop hack should be applied.
      void updateUI()
      updateUI is overridden to set the colors of the Tree's renderer to match that of the table.
      • Methods inherited from class javax.swing.JTree

        addSelectionInterval, addSelectionPath, addSelectionPaths, addSelectionRow, addSelectionRows, addTreeExpansionListener, addTreeSelectionListener, addTreeWillExpandListener, cancelEditing, clearSelection, clearToggledPaths, collapsePath, collapseRow, convertValueToText, createTreeModel, expandPath, expandRow, fireTreeCollapsed, fireTreeExpanded, fireTreeWillCollapse, fireTreeWillExpand, fireValueChanged, getAccessibleContext, getAnchorSelectionPath, getCellEditor, getClosestPathForLocation, getClosestRowForLocation, getDefaultTreeModel, getDescendantToggledPaths, getDragEnabled, getDropLocation, getDropMode, getEditingPath, getExpandedDescendants, getExpandsSelectedPaths, getInvokesStopCellEditing, getLastSelectedPathComponent, getLeadSelectionPath, getLeadSelectionRow, getMaxSelectionRow, getMinSelectionRow, getModel, getPathBetweenRows, getPathBounds, getPathForLocation, getPathForRow, getPreferredScrollableViewportSize, getRowBounds, getRowCount, getRowForLocation, getRowForPath, getRowHeight, getScrollableBlockIncrement, getScrollableTracksViewportHeight, getScrollableTracksViewportWidth, getScrollableUnitIncrement, getScrollsOnExpand, getSelectionCount, getSelectionModel, getSelectionPath, getShowsRootHandles, getToggleClickCount, getToolTipText, getTreeExpansionListeners, getTreeSelectionListeners, getTreeWillExpandListeners, getUI, getUIClassID, getVisibleRowCount, hasBeenExpanded, isCollapsed, isCollapsed, isEditable, isEditing, isExpanded, isExpanded, isFixedRowHeight, isLargeModel, isPathEditable, isPathSelected, isRootVisible, isSelectionEmpty, isVisible, makeVisible, paramString, removeDescendantSelectedPaths, removeDescendantToggledPaths, removeSelectionInterval, removeSelectionPath, removeSelectionPaths, removeSelectionRow, removeSelectionRows, removeTreeExpansionListener, removeTreeSelectionListener, removeTreeWillExpandListener, scrollPathToVisible, scrollRowToVisible, setAnchorSelectionPath, setCellEditor, setDragEnabled, setDropMode, setEditable, setExpandsSelectedPaths, setInvokesStopCellEditing, setLargeModel, setLeadSelectionPath, setRootVisible, setScrollsOnExpand, setSelectionInterval, setSelectionModel, setSelectionPath, setSelectionPaths, setSelectionRow, setSelectionRows, setShowsRootHandles, setToggleClickCount, setUI, setVisibleRowCount, stopEditing, treeDidChange
      • Methods inherited from class javax.swing.JComponent

        addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
      • Methods inherited from class java.awt.Container

        add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree
      • Methods inherited from class java.awt.Component

        action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • rolloverListener

        private java.beans.PropertyChangeListener rolloverListener
      • cellBorder

        private javax.swing.border.Border cellBorder
      • highlightBorder

        protected javax.swing.border.Border highlightBorder
        Border to draw around the tree, if this is non-null, it will be painted.
      • visibleRow

        protected int visibleRow
      • hierarchicalColumnWidth

        private int hierarchicalColumnWidth
    • Constructor Detail

      • TreeTableCellRenderer

        public TreeTableCellRenderer​(TreeTableModel model)
    • Method Detail

      • isVisible

        public boolean isVisible()

        Overridden to hack around #766-swingx: cursor flickering in DnD when dragging over tree column. This is a core bug (#6700748) related to painting the rendering component on a CellRendererPane. A trick around is to let this return false.

        This implementation applies the trick, that is returns false always. The hack can be disabled by setting the treeTable's client property DROP_HACK_FLAG_KEY to Boolean.FALSE.

        Overrides:
        isVisible in class java.awt.Component
      • shouldApplyDropHack

        protected boolean shouldApplyDropHack()
        Returns a boolean indicating whether the drop hack should be applied.
        Returns:
        a boolean indicating whether the drop hack should be applied.
      • getToolTipText

        private java.lang.String getToolTipText​(java.awt.event.MouseEvent event,
                                                int row,
                                                int column)
        Hack around #297-swingx: tooltips shown at wrong row. The problem is that - due to much tricksery when rendering the tree - the given coordinates are rather useless. As a consequence, super maps to wrong coordinates. This takes over completely. PENDING: bidi?
        Parameters:
        event - the mouseEvent in treetable coordinates
        row - the view row index
        column - the view column index
        Returns:
        the tooltip as appropriate for the given row
      • setToolTipText

        public void setToolTipText​(java.lang.String text)

        Overridden to not automatically de/register itself from/to the ToolTipManager. As rendering component it is not considered to be active in any way, so the manager must not listen.

        Overrides:
        setToolTipText in class javax.swing.JComponent
      • bind

        public final void bind​(JXTreeTable treeTable)
        Immutably binds this TreeTableModelAdapter to the specified JXTreeTable. For internal use by JXTreeTable only.
        Parameters:
        treeTable - the JXTreeTable instance that this renderer is bound to
      • bindRollover

        private void bindRollover()
        Install rollover support. Not used - still has issues. - not bidi-compliant - no coordinate transformation for hierarchical column != 0 - method name clash enabled - keyboard triggered click unreliable (triggers the treetable) ...
      • getRolloverListener

        private java.beans.PropertyChangeListener getRolloverListener()
        Returns:
      • createRolloverListener

        protected java.beans.PropertyChangeListener createRolloverListener()
        Creates and returns a property change listener for table's rollover related properties. This implementation - Synchs the tree's rolloverEnabled - maps rollover cell from the table to the cell (still incomplete: first column only)
        Returns:
      • createRolloverProducer

        protected RolloverProducer createRolloverProducer()
        Creates and returns the RolloverProducer to use with this tree.

        Overridden to produce clicked client props only. The rollover are produced by a propertyChangeListener to the table's corresponding prop.

        Overrides:
        createRolloverProducer in class JXTree
        Returns:
        RolloverProducer to use with this tree
        See Also:
        JXTree.setRolloverEnabled(boolean)
      • scrollRectToVisible

        public void scrollRectToVisible​(java.awt.Rectangle aRect)
        Overrides:
        scrollRectToVisible in class javax.swing.JComponent
      • setExpandedState

        protected void setExpandedState​(javax.swing.tree.TreePath path,
                                        boolean state)
        Overrides:
        setExpandedState in class javax.swing.JTree
      • updateUI

        public void updateUI()
        updateUI is overridden to set the colors of the Tree's renderer to match that of the table.
        Overrides:
        updateUI in class JXTree
      • setRowHeight

        public void setRowHeight​(int rowHeight)
        Sets the row height of the tree, and forwards the row height to the table.
        Overrides:
        setRowHeight in class javax.swing.JTree
      • setBounds

        public void setBounds​(int x,
                              int y,
                              int w,
                              int h)
        This is overridden to set the location to (0, 0) and set the dimension to exactly fill the bounds of the hierarchical column.

        Overrides:
        setBounds in class java.awt.Component
      • paint

        public void paint​(java.awt.Graphics g)
        Sublcassed to translate the graphics such that the last visible row will be drawn at 0,0.
        Overrides:
        paint in class javax.swing.JComponent
      • setBorder

        public void setBorder​(javax.swing.border.Border border)

        Overridden to fix #swingx-1525: BorderHighlighter fills tree column.

        Basically, the reason was that the border is set on the tree as a whole instead of on the cell level. The fix is to bypass super completely, keep a reference to the cell border and manually paint it around the cell in the overridden paint.

        Note: in the paint we need to paint either the focus border or the cellBorder, the former taking precedence.

        Overrides:
        setBorder in class javax.swing.JComponent
      • doClick

        public void doClick()
      • isRowSelected

        public boolean isRowSelected​(int row)
        Overrides:
        isRowSelected in class javax.swing.JTree
      • getTableCellRendererComponent

        public java.awt.Component getTableCellRendererComponent​(javax.swing.JTable table,
                                                                java.lang.Object value,
                                                                boolean isSelected,
                                                                boolean hasFocus,
                                                                int row,
                                                                int column)
        Specified by:
        getTableCellRendererComponent in interface javax.swing.table.TableCellRenderer