Class DefaultTreeTableModel

  • All Implemented Interfaces:
    javax.swing.tree.TreeModel, TreeTableModel

    public class DefaultTreeTableModel
    extends AbstractTreeTableModel
    DefaultTreeTableModel is a concrete implementation of AbstractTreeTableModel and is provided purely as a convenience. Applications that use JXTreeTable are expected to provide their own implementation of a TreeTableModel.

    The DefaultTreeTableModel is designed to be used with TreeTableNodes. Specifically, users should extend AbstractMutableTreeTableNode to provide custom implementations for data display.

    Users who do not provide a list of column identifiers must provide a root that contains at least one column. Without specified identifiers the model will attempt to calculate the columns required for display by querying the root node. Normally, the root node can be little more than a shell (in displays that hide it), but without identifiers, the model relies on the root node metadata for display.

    • Field Detail

      • columnIdentifiers

        protected java.util.List<?> columnIdentifiers
        The List of column identifiers.
    • Constructor Detail

      • DefaultTreeTableModel

        public DefaultTreeTableModel()
        Creates a new DefaultTreeTableModel with a null root.
      • DefaultTreeTableModel

        public DefaultTreeTableModel​(TreeTableNode root)
        Creates a new DefaultTreeTableModel with the specified root. asksAllowsChildren is disabled and isLeaf will provide the same semantics as AbstractTreeTableModel.isLeaf.
        Parameters:
        root - the root node of the tree
      • DefaultTreeTableModel

        public DefaultTreeTableModel​(TreeTableNode root,
                                     java.util.List<?> columnNames)
        Creates a new DefaultTreeTableModel with the specified root. asksAllowsChildren is disabled and isLeaf will provide the same semantics as AbstractTreeTableModel.isLeaf.
        Parameters:
        root - the root node of the tree
    • Method Detail

      • setColumnIdentifiers

        public void setColumnIdentifiers​(java.util.List<?> columnIdentifiers)
        Replaces the column identifiers in the model. If the number of newIdentifiers is greater than the current number of columns, new columns are added to the end of each row in the model. If the number of newIdentifiers is less than the current number of columns, all the extra columns at the end of a row are discarded.

        Parameters:
        columnIdentifiers - vector of column identifiers. If null, set the model to zero columns
      • getRoot

        public TreeTableNode getRoot()
        Returns the root of the tree. Returns null only if the tree has no nodes.
        Specified by:
        getRoot in interface javax.swing.tree.TreeModel
        Overrides:
        getRoot in class AbstractTreeTableModel
        Returns:
        the root of the tree
        Throws:
        java.lang.ClassCastException - if root is not a TreeTableNode. Even though subclasses have direct access to root, they should avoid accessing it directly.
        See Also:
        AbstractTreeTableModel.root, setRoot(TreeTableNode)
      • getValueAt

        public java.lang.Object getValueAt​(java.lang.Object node,
                                           int column)
        Gets the value for the node at column.
        Parameters:
        node - the node whose value is to be queried
        column - the column whose value is to be queried
        Returns:
        the value Object at the specified cell
        Throws:
        java.lang.IllegalArgumentException - if node is not an instance of TreeTableNode or is not managed by this model, or column is not a valid column index
        See Also:
        TreeTableModel.setValueAt(java.lang.Object, java.lang.Object, int), TableModel.getValueAt(int, int)
      • getColumnCount

        public int getColumnCount()
        Returns the number of columns in the model. A JXTreeTable uses this method to determine how many columns it should create and display by default.
        Returns:
        the number of columns in the model
        See Also:
        TableModel.getColumnCount()
      • getColumnName

        public java.lang.String getColumnName​(int column)
        Returns the name of the column at columnIndex. This is used to initialize the table's column header name. Note: this name does not need to be unique; two columns in a table can have the same name.
        Specified by:
        getColumnName in interface TreeTableModel
        Overrides:
        getColumnName in class AbstractTreeTableModel
        Parameters:
        column - the index of the column
        Returns:
        the name of the column
        See Also:
        TableModel.getColumnName(int)
      • getChild

        public java.lang.Object getChild​(java.lang.Object parent,
                                         int index)
      • getChildCount

        public int getChildCount​(java.lang.Object parent)
      • getIndexOfChild

        public int getIndexOfChild​(java.lang.Object parent,
                                   java.lang.Object child)
      • isCellEditable

        public boolean isCellEditable​(java.lang.Object node,
                                      int column)
        Returns true if the cell for the node at columnIndex is editable. Otherwise, setValueAt on the cell will not change the value of that cell. The node must be managed by this model. Unamanaged nodes should throw an IllegalArgumentException.
        Specified by:
        isCellEditable in interface TreeTableModel
        Overrides:
        isCellEditable in class AbstractTreeTableModel
        Parameters:
        node - the node whose value to be queried
        column - the column whose value to be queried
        Returns:
        true if the cell is editable
        See Also:
        TreeTableModel.setValueAt(java.lang.Object, java.lang.Object, int), TableModel.isCellEditable(int, int)
      • isLeaf

        public boolean isLeaf​(java.lang.Object node)
        Returns true if node is a leaf.
        Specified by:
        isLeaf in interface javax.swing.tree.TreeModel
        Overrides:
        isLeaf in class AbstractTreeTableModel
        Parameters:
        node - a node in the tree, obtained from this data source
        Returns:
        true if node is a leaf
      • getPathToRoot

        public TreeTableNode[] getPathToRoot​(TreeTableNode aNode)
        Gets the path from the root to the specified node.
        Parameters:
        aNode - the node to query
        Returns:
        an array of TreeTableNodes, where arr[0].equals(getRoot()) and arr[arr.length - 1].equals(aNode), or an empty array if the node is not found.
        Throws:
        java.lang.NullPointerException - if aNode is null
      • setRoot

        public void setRoot​(TreeTableNode root)
        Sets the root for this table model. If no column identifiers have been specified, this will rebuild the identifier list, using root as an examplar of the table.
        Parameters:
        root - the node to set as root
      • insertNodeInto

        public void insertNodeInto​(MutableTreeTableNode newChild,
                                   MutableTreeTableNode parent,
                                   int index)
        Invoked this to insert newChild at location index in parents children. This will then message nodesWereInserted to create the appropriate event. This is the preferred way to add children as it will create the appropriate event.
      • removeNodeFromParent

        public void removeNodeFromParent​(MutableTreeTableNode node)
        Message this to remove node from its parent. This will message nodesWereRemoved to create the appropriate event. This is the preferred way to remove a node as it handles the event creation for you.