How can I filter images and use filesystemview icons in my jtree?

Posted by HoLeX on Stack Overflow See other posts from Stack Overflow or by HoLeX
Published on 2013-10-25T15:52:25Z Indexed on 2013/10/25 15:53 UTC
Read the original article Hit count: 180

Filed under:
|
|
|
|

First of all sorry about my english. So, i have some problems with my JTree because i want to filter specific types of images and also i want to use icons of FileSystemView class. Can you help me? I will appreciate so much.

Here is my code:

import java.awt.BorderLayout;
import java.io.File;
import java.util.Iterator;
import java.util.Vector;
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;


public class ArbolDirectorio extends JPanel 
{
    private JTree fileTree;
    private FileSystemModel fileSystemModel;

    public ArbolDirectorio(String directory) 
    {
        this.setLayout(new BorderLayout());
        this.fileSystemModel = new FileSystemModel(new File(directory));
        this.fileTree = new JTree(fileSystemModel);
        this.fileTree.setEditable(true);
        this.fileTree.addTreeSelectionListener(new TreeSelectionListener() 
        {
            @Override
            public void valueChanged(TreeSelectionEvent event) 
            {
                File file = (File) fileTree.getLastSelectedPathComponent();
                System.out.println(getFileDetails(file));
            }
        });

        this.add(fileTree, BorderLayout.CENTER);
    }

  private String getFileDetails(File file) 
  {
      if (file == null)
      {
          return "";
      }
      StringBuffer buffer = new StringBuffer();
      buffer.append("Name: " + file.getName() + "\n");
      buffer.append("Path: " + file.getPath() + "\n");
      return buffer.toString();
  }

}

class FileSystemModel implements TreeModel 
{
    private File root;
    private Vector listeners = new Vector();

    public FileSystemModel(File rootDirectory) 
    {
        root = rootDirectory;
    }

    @Override
    public Object getRoot() 
    {
        return root;
    }

    @Override
    public Object getChild(Object parent, int index) 
    {
        File directory = (File) parent;
        String[] children = directory.list();
        return new TreeFile(directory, children[index]);
    }

    @Override
    public int getChildCount(Object parent) 
    {
        File file = (File) parent;
        if (file.isDirectory()) 
        {
            String[] fileList = file.list();
            if (fileList != null)
            {
                return file.list().length;
            }
        }
        return 0;
    }

    @Override
    public boolean isLeaf(Object node) 
    {
        File file = (File) node;
        return file.isFile();
    }

    @Override
    public int getIndexOfChild(Object parent, Object child) 
    {
        File directory = (File) parent;
        File file = (File) child;
        String[] children = directory.list();
        for (int i = 0; i < children.length; i++) 
        {
            if (file.getName().equals(children[i])) 
            {
                return i;
            }
        }
        return -1;
    }

    @Override
    public void valueForPathChanged(TreePath path, Object value) 
    {
        File oldFile = (File) path.getLastPathComponent();
        String fileParentPath = oldFile.getParent();
        String newFileName = (String) value;
        File targetFile = new File(fileParentPath, newFileName);
        oldFile.renameTo(targetFile);
        File parent = new File(fileParentPath);
        int[] changedChildrenIndices = { getIndexOfChild(parent, targetFile) };
        Object[] changedChildren = { targetFile };
        fireTreeNodesChanged(path.getParentPath(), changedChildrenIndices, changedChildren);
    }

    private void fireTreeNodesChanged(TreePath parentPath, int[] indices, Object[] children) 
    {
        TreeModelEvent event = new TreeModelEvent(this, parentPath, indices, children);
        Iterator iterator = listeners.iterator();
        TreeModelListener listener = null;
        while (iterator.hasNext()) 
        {
            listener = (TreeModelListener) iterator.next();
            listener.treeNodesChanged(event);
        }
    }

    @Override
    public void addTreeModelListener(TreeModelListener listener) 
    {
        listeners.add(listener);
    }

    @Override
    public void removeTreeModelListener(TreeModelListener listener) 
    {
        listeners.remove(listener);
    }

    private class TreeFile extends File 
    {
        public TreeFile(File parent, String child) 
        {
            super(parent, child);
        }

        @Override
        public String toString() 
        {
            return getName();
        }
    }
}

© Stack Overflow or respective owner

Related posts about image

Related posts about filter