Class SimpleFileSystemModel

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

    public class SimpleFileSystemModel
    extends java.lang.Object
    implements TreeTableModel
    A tree table model to simulate a file system.

    This tree table model implementation does not extends AbstractTreeTableModel. The file system metaphor demonstrates that it is often easier to directly implement tree structures directly instead of using intermediaries, such as TreeNode.

    It would be possible to create this same class by extending AbstractTreeTableModel, however the number of methods that you would need to override almost precludes that means of implementation.

    A "full" version of this model might allow editing of file names, the deletion of files, and the movement of files. This simple implementation does not intend to tackle such problems, but this implementation may be extended to handle such details.

    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected javax.swing.event.EventListenerList listenerList  
      private java.io.File root  
      private static java.lang.Long ZERO  
    • Constructor Summary

      Constructors 
      Constructor Description
      SimpleFileSystemModel()
      Creates a file system model, using the root directory as the model root.
      SimpleFileSystemModel​(java.io.File root)
      Creates a file system model, using the specified root as the model root.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void addTreeModelListener​(javax.swing.event.TreeModelListener l)
      java.io.File getChild​(java.lang.Object parent, int index)
      int getChildCount​(java.lang.Object parent)
      java.lang.Class<?> getColumnClass​(int column)
      Returns the most specific superclass for all the cell values in the column.
      int getColumnCount()
      Returns the number of columns in the model.
      java.lang.String getColumnName​(int column)
      Returns the name of the column at columnIndex.
      int getHierarchicalColumn()
      Returns the column that is the "tree" column.
      int getIndexOfChild​(java.lang.Object parent, java.lang.Object child)
      java.io.File getRoot()
      javax.swing.event.TreeModelListener[] getTreeModelListeners()
      Gets a an array of all the listeners attached to this model.
      java.lang.Object getValueAt​(java.lang.Object node, int column)
      Returns the value for the node at columnIndex.
      boolean isCellEditable​(java.lang.Object node, int column)
      Returns true if the cell for the node at columnIndex is editable.
      boolean isLeaf​(java.lang.Object node)
      void removeTreeModelListener​(javax.swing.event.TreeModelListener l)
      void setValueAt​(java.lang.Object value, java.lang.Object node, int column)
      Sets the value for the node at columnIndex to value.
      void valueForPathChanged​(javax.swing.tree.TreePath path, java.lang.Object newValue)
      • Methods inherited from class java.lang.Object

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

      • listenerList

        protected javax.swing.event.EventListenerList listenerList
      • ZERO

        private static final java.lang.Long ZERO
      • root

        private java.io.File root
    • Constructor Detail

      • SimpleFileSystemModel

        public SimpleFileSystemModel()
        Creates a file system model, using the root directory as the model root.
      • SimpleFileSystemModel

        public SimpleFileSystemModel​(java.io.File root)
        Creates a file system model, using the specified root as the model root.
    • Method Detail

      • getChild

        public java.io.File getChild​(java.lang.Object parent,
                                     int index)
        Specified by:
        getChild in interface javax.swing.tree.TreeModel
      • getChildCount

        public int getChildCount​(java.lang.Object parent)
        Specified by:
        getChildCount in interface javax.swing.tree.TreeModel
      • getColumnClass

        public java.lang.Class<?> getColumnClass​(int column)
        Returns the most specific superclass for all the cell values in the column. This is used by the JXTreeTable to set up a default renderer and editor for the column.
        Specified by:
        getColumnClass in interface TreeTableModel
        Parameters:
        column - the index of the column
        Returns:
        the common ancestor class of the object values in the model.
        See Also:
        TableModel.getColumnClass(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.
        Specified by:
        getColumnCount in interface TreeTableModel
        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
        Parameters:
        column - the index of the column
        Returns:
        the name of the column
        See Also:
        TableModel.getColumnName(int)
      • getValueAt

        public java.lang.Object getValueAt​(java.lang.Object node,
                                           int column)
        Returns the value for the node at columnIndex. The node must be managed by this model. Unamanaged nodes should throw an IllegalArgumentException.
        Specified by:
        getValueAt in interface TreeTableModel
        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
        See Also:
        TreeTableModel.setValueAt(java.lang.Object, java.lang.Object, int), TableModel.getValueAt(int, int)
      • getHierarchicalColumn

        public int getHierarchicalColumn()
        Returns the column that is the "tree" column. While it is not required, most implementations will default the first column to be the hierarchical one.
        Specified by:
        getHierarchicalColumn in interface TreeTableModel
        Returns:
        the index of the hierarchical column or -1 if no column is the hierarchical column.
      • 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
        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)
      • addTreeModelListener

        public void addTreeModelListener​(javax.swing.event.TreeModelListener l)
        Specified by:
        addTreeModelListener in interface javax.swing.tree.TreeModel
      • getIndexOfChild

        public int getIndexOfChild​(java.lang.Object parent,
                                   java.lang.Object child)
        Specified by:
        getIndexOfChild in interface javax.swing.tree.TreeModel
      • getRoot

        public java.io.File getRoot()
        Specified by:
        getRoot in interface javax.swing.tree.TreeModel
      • isLeaf

        public boolean isLeaf​(java.lang.Object node)
        Specified by:
        isLeaf in interface javax.swing.tree.TreeModel
      • removeTreeModelListener

        public void removeTreeModelListener​(javax.swing.event.TreeModelListener l)
        Specified by:
        removeTreeModelListener in interface javax.swing.tree.TreeModel
      • valueForPathChanged

        public void valueForPathChanged​(javax.swing.tree.TreePath path,
                                        java.lang.Object newValue)
        Specified by:
        valueForPathChanged in interface javax.swing.tree.TreeModel
      • getTreeModelListeners

        public javax.swing.event.TreeModelListener[] getTreeModelListeners()
        Gets a an array of all the listeners attached to this model.
        Returns:
        an array of listeners; this array is guaranteed to be non-null