display files also in tree?

hai, to every one

This program displaying folders from the local system, But my problem is, it was not displaying files.

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import java.util.*;

import javax.swing.*;

import javax.swing.tree.*;

import javax.swing.event.*;

publicclass FileTree1

extends JFrame

{

publicstaticfinal ImageIcon ICON_COMPUTER =

new ImageIcon("computer.gif");

publicstaticfinal ImageIcon ICON_DISK =

new ImageIcon("disk.gif");

publicstaticfinal ImageIcon ICON_FOLDER =

new ImageIcon("folder.gif");

publicstaticfinal ImageIcon ICON_EXPANDEDFOLDER =

new ImageIcon("expandedfolder.gif");

protected JTree m_tree;

protected DefaultTreeModel m_model;

protected JTextField m_display;

public FileTree1()

{

super("Directories Tree");

setSize(400, 300);

DefaultMutableTreeNode top =new DefaultMutableTreeNode(

new IconData(ICON_COMPUTER, null,"Computer"));

DefaultMutableTreeNode node;

File[] roots = File.listRoots();

for (int k=0; k<roots.length; k++)

{

node =new DefaultMutableTreeNode(new IconData(ICON_DISK,

null,new FileNode(roots[k])));

top.add(node);

node.add(new DefaultMutableTreeNode(new Boolean(true)));

}

m_model =new DefaultTreeModel(top);

m_tree =new JTree(m_model);

m_tree.putClientProperty("JTree.lineStyle","Angled");

TreeCellRenderer renderer =new

IconCellRenderer();

m_tree.setCellRenderer(renderer);

m_tree.addTreeExpansionListener(new

DirExpansionListener());

m_tree.addTreeSelectionListener(new

DirSelectionListener());

m_tree.getSelectionModel().setSelectionMode(

TreeSelectionModel.SINGLE_TREE_SELECTION);

m_tree.setShowsRootHandles(true);

m_tree.setEditable(false);

JScrollPane s =new JScrollPane();

s.getViewport().add(m_tree);

getContentPane().add(s, BorderLayout.CENTER);

m_display =new JTextField();

m_display.setEditable(false);

getContentPane().add(m_display, BorderLayout.NORTH);

WindowListener wndCloser =new WindowAdapter()

{

publicvoid windowClosing(WindowEvent e)

{

System.exit(0);

}

};

addWindowListener(wndCloser);

setVisible(true);

}

DefaultMutableTreeNode getTreeNode(TreePath path)

{

return (DefaultMutableTreeNode)(path.getLastPathComponent());

}

FileNode getFileNode(DefaultMutableTreeNode node)

{

if (node ==null)

returnnull;

Object obj = node.getUserObject();

if (objinstanceof IconData)

obj = ((IconData)obj).getObject();

if (objinstanceof FileNode)

return (FileNode)obj;

else

returnnull;

}

// Make sure expansion is threaded and updating the tree model

// only occurs within the event dispatching thread.

class DirExpansionListenerimplements TreeExpansionListener

{

publicvoid treeExpanded(TreeExpansionEvent event)

{

final DefaultMutableTreeNode node = getTreeNode(

event.getPath());

final FileNode fnode = getFileNode(node);

Thread runner =new Thread()

{

publicvoid run()

{

if (fnode !=null && fnode.expand(node))

{

Runnable runnable =new Runnable()

{

publicvoid run()

{

m_model.reload(node);

}

};

SwingUtilities.invokeLater(runnable);

}

}

};

runner.start();

}

publicvoid treeCollapsed(TreeExpansionEvent event){}

}

class DirSelectionListener

implements TreeSelectionListener

{

publicvoid valueChanged(TreeSelectionEvent event)

{

DefaultMutableTreeNode node = getTreeNode(

event.getPath());

FileNode fnode = getFileNode(node);

if (fnode !=null)

m_display.setText(fnode.getFile().

getAbsolutePath());

else

m_display.setText("");

}

}

publicstaticvoid main(String argv[])

{

new FileTree1();

}

}

class IconCellRenderer

extendsJLabel

implements TreeCellRenderer

{

protected Color m_textSelectionColor;

protected Color m_textNonSelectionColor;

protected Color m_bkSelectionColor;

protected Color m_bkNonSelectionColor;

protected Color m_borderSelectionColor;

protectedboolean m_selected;

public IconCellRenderer()

{

super();

m_textSelectionColor = UIManager.getColor(

"Tree.selectionForeground");

m_textNonSelectionColor = UIManager.getColor(

"Tree.textForeground");

m_bkSelectionColor = UIManager.getColor(

"Tree.selectionBackground");

m_bkNonSelectionColor = UIManager.getColor(

"Tree.textBackground");

m_borderSelectionColor = UIManager.getColor(

"Tree.selectionBorderColor");

setOpaque(false);

}

public Component getTreeCellRendererComponent(JTree tree,

Object value,boolean sel,boolean expanded,boolean leaf,

int row,boolean hasFocus)

{

DefaultMutableTreeNode node =

(DefaultMutableTreeNode)value;

Object obj = node.getUserObject();

setText(obj.toString());

if (objinstanceof Boolean)

setText("Retrieving data...");

if (objinstanceof IconData)

{

IconData idata = (IconData)obj;

if (expanded)

setIcon(idata.getExpandedIcon());

else

setIcon(idata.getIcon());

}

else

setIcon(null);

setFont(tree.getFont());

setForeground(sel ? m_textSelectionColor :

m_textNonSelectionColor);

setBackground(sel ? m_bkSelectionColor :

m_bkNonSelectionColor);

m_selected = sel;

returnthis;

}

publicvoid paintComponent(Graphics g)

{

Color bColor = getBackground();

Icon icon = getIcon();

g.setColor(bColor);

int offset = 0;

if(icon !=null && getText() !=null)

offset = (icon.getIconWidth() + getIconTextGap());

g.fillRect(offset, 0, getWidth() - 1 - offset,

getHeight() - 1);

if (m_selected)

{

g.setColor(m_borderSelectionColor);

g.drawRect(offset, 0, getWidth()-1-offset, getHeight()-1);

}

super.paintComponent(g);

}

}

class IconData

{

protected Iconm_icon;

protected Iconm_expandedIcon;

protected Object m_data;

public IconData(Icon icon, Object data)

{

m_icon = icon;

m_expandedIcon =null;

m_data = data;

}

public IconData(Icon icon, Icon expandedIcon, Object data)

{

m_icon = icon;

m_expandedIcon = expandedIcon;

m_data = data;

}

public Icon getIcon()

{

return m_icon;

}

public Icon getExpandedIcon()

{

return m_expandedIcon!=null ? m_expandedIcon : m_icon;

}

public Object getObject()

{

return m_data;

}

public String toString()

{

return m_data.toString();

}

}

class FileNode

{

protected File m_file;

public FileNode(File file)

{

m_file = file;

}

public File getFile()

{

return m_file;

}

public String toString()

{

return m_file.getName().length() > 0 ? m_file.getName() :

m_file.getPath();

}

publicboolean expand(DefaultMutableTreeNode parent)

{

DefaultMutableTreeNode flag =

(DefaultMutableTreeNode)parent.getFirstChild();

if (flag==null)// No flag

returnfalse;

Object obj = flag.getUserObject();

if (!(objinstanceof Boolean))

returnfalse;// Already expanded

parent.removeAllChildren();// Remove Flag

File[] files = listFiles();

if (files ==null)

returntrue;

Vector v =new Vector();

for (int k=0; k<files.length; k++)

{

/*File child = new File(dir, list[i]);

String name = (child.getName()) ;

if(child.isDirectory()) add(new Node(child));

else add(new Node(child));*/

File f = files[k];

if (!(f.isDirectory()))

continue;

FileNode newNode =new FileNode(f);

boolean isAdded =false;

for (int i=0; i><v.size(); i++)

{

FileNode nd = (FileNode)v.elementAt(i);

if (newNode.compareTo(nd) >< 0)

{

v.insertElementAt(newNode, i);

isAdded =true;

break;

}

}

if (!isAdded)

v.addElement(newNode);

}

for (int i=0; i<v.size(); i++)

{

FileNode nd = (FileNode)v.elementAt(i);

IconData idata =new IconData(FileTree1.ICON_FOLDER,

FileTree1.ICON_EXPANDEDFOLDER, nd);

DefaultMutableTreeNode node =new

DefaultMutableTreeNode(idata);

parent.add(node);

if (nd.hasSubDirs())

node.add(new DefaultMutableTreeNode(

new Boolean(true) ));

}

returntrue;

}

publicboolean hasSubDirs()

{

File[] files = listFiles();

if (files ==null)

returnfalse;

for (int k=0; k><files.length; k++)

{

if (files[k].isDirectory())

returntrue;

}

returnfalse;

}

publicint compareTo(FileNode toCompare)

{

return m_file.getName().compareToIgnoreCase(

toCompare.m_file.getName() );

}

protected File[] listFiles()

{

if (!m_file.isDirectory())

return m_file.listFiles();

try

{

return m_file.listFiles();

}

catch (Exception ex)

{

JOptionPane.showMessageDialog(null,

"Error reading directory "+m_file.getAbsolutePath(),

"Warning", JOptionPane.WARNING_MESSAGE);

returnnull;

}

}

}

Thanks in advance

raja>

[20258 byte] By [raja8nza] at [2007-10-3 8:34:27]
# 1

Hi

in this part of the code

if (files[k].isDirectory())

return true;

}

return false;

}

you have to remove the condition that prevents files to be shown which is (.....isDirectory)

also remove all the conditions that are the same to the prevoius one.

But I think It's better to let it like this because many files will take a lot of time to be shown in your tree.

Good Luck

tony_alpaa at 2007-7-15 3:41:56 > top of Java-index,Desktop,Core GUI APIs...
# 2
hai tony_alpha, thank for reply i changed like that, but no difference, if u dont mind can u alter the code send it.iam waiting for ur replythanks in advanceraja
raja8nza at 2007-7-15 3:41:56 > top of Java-index,Desktop,Core GUI APIs...
# 3

This code shows the files in your tree

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import java.util.*;

import javax.swing.*;

import javax.swing.tree.*;

import javax.swing.event.*;

public class FileTree1

extends JFrame

{

public static final ImageIcon ICON_COMPUTER =

new ImageIcon("computer.gif");

public static final ImageIcon ICON_DISK =

new ImageIcon("disk.gif");

public static final ImageIcon ICON_FOLDER =

new ImageIcon("folder.gif");

public static final ImageIcon ICON_EXPANDEDFOLDER =

new ImageIcon("expandedfolder.gif");

protected JTree m_tree;

protected DefaultTreeModel m_model;

protected JTextField m_display;

public FileTree1()

{

super("Directories Tree");

setSize(400, 300);

DefaultMutableTreeNode top = new DefaultMutableTreeNode(

new IconData(ICON_COMPUTER, null, "Computer"));

DefaultMutableTreeNode node;

File[] roots = File.listRoots();

for (int k=0; k<roots.length; k++)

{

node = new DefaultMutableTreeNode(new IconData(ICON_DISK,

null, new FileNode(roots[k])));

top.add(node);

node.add( new DefaultMutableTreeNode(new Boolean(true)));

}

m_model = new DefaultTreeModel(top);

m_tree = new JTree(m_model);

m_tree.putClientProperty("JTree.lineStyle", "Angled");

TreeCellRenderer renderer = new

IconCellRenderer();

m_tree.setCellRenderer(renderer);

m_tree.addTreeExpansionListener(new

DirExpansionListener());

m_tree.addTreeSelectionListener(new

DirSelectionListener());

m_tree.getSelectionModel().setSelectionMode(

TreeSelectionModel.SINGLE_TREE_SELECTION);

m_tree.setShowsRootHandles(true);

m_tree.setEditable(false);

JScrollPane s = new JScrollPane();

s.getViewport().add(m_tree);

getContentPane().add(s, BorderLayout.CENTER);

m_display = new JTextField();

m_display.setEditable(false);

getContentPane().add(m_display, BorderLayout.NORTH);

WindowListener wndCloser = new WindowAdapter()

{

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

};

addWindowListener(wndCloser);

setVisible(true);

}

DefaultMutableTreeNode getTreeNode(TreePath path)

{

return (DefaultMutableTreeNode)(path.getLastPathComponent());

}

FileNode getFileNode(DefaultMutableTreeNode node)

{

if (node == null)

return null;

Object obj = node.getUserObject();

if (obj instanceof IconData)

obj = ((IconData)obj).getObject();

if (obj instanceof FileNode)

return (FileNode)obj;

else

return null;

}

// Make sure expansion is threaded and updating the tree model

// only occurs within the event dispatching thread.

class DirExpansionListener implements TreeExpansionListener

{

public void treeExpanded(TreeExpansionEvent event)

{

final DefaultMutableTreeNode node = getTreeNode(

event.getPath());

final FileNode fnode = getFileNode(node);

Thread runner = new Thread()

{

public void run()

{

if (fnode != null && fnode.expand(node))

{

Runnable runnable = new Runnable()

{

public void run()

{

m_model.reload(node);

}

};

SwingUtilities.invokeLater(runnable);

}

}

};

runner.start();

}

public void treeCollapsed(TreeExpansionEvent event) {}

}

class DirSelectionListener

implements TreeSelectionListener

{

public void valueChanged(TreeSelectionEvent event)

{

DefaultMutableTreeNode node = getTreeNode(

event.getPath());

FileNode fnode = getFileNode(node);

if (fnode != null)

m_display.setText(fnode.getFile().

getAbsolutePath());

else

m_display.setText("");

}

}

public static void main(String argv[])

{

new FileTree1();

}

}

class IconCellRenderer

extendsJLabel

implements TreeCellRenderer

{

protected Color m_textSelectionColor;

protected Color m_textNonSelectionColor;

protected Color m_bkSelectionColor;

protected Color m_bkNonSelectionColor;

protected Color m_borderSelectionColor;

protected boolean m_selected;

public IconCellRenderer()

{

super();

m_textSelectionColor = UIManager.getColor(

"Tree.selectionForeground");

m_textNonSelectionColor = UIManager.getColor(

"Tree.textForeground");

m_bkSelectionColor = UIManager.getColor(

"Tree.selectionBackground");

m_bkNonSelectionColor = UIManager.getColor(

"Tree.textBackground");

m_borderSelectionColor = UIManager.getColor(

"Tree.selectionBorderColor");

setOpaque(false);

}

public Component getTreeCellRendererComponent(JTree tree,

Object value, boolean sel, boolean expanded, boolean leaf,

int row, boolean hasFocus)

{

DefaultMutableTreeNode node =

(DefaultMutableTreeNode)value;

Object obj = node.getUserObject();

setText(obj.toString());

if (obj instanceof Boolean)

setText("Retrieving data...");

if (obj instanceof IconData)

{

IconData idata = (IconData)obj;

if (expanded)

setIcon(idata.getExpandedIcon());

else

setIcon(idata.getIcon());

}

else

setIcon(null);

setFont(tree.getFont());

setForeground(sel ? m_textSelectionColor :

m_textNonSelectionColor);

setBackground(sel ? m_bkSelectionColor :

m_bkNonSelectionColor);

m_selected = sel;

return this;

}

public void paintComponent(Graphics g)

{

Color bColor = getBackground();

Icon icon = getIcon();

g.setColor(bColor);

int offset = 0;

if(icon != null && getText() != null)

offset = (icon.getIconWidth() + getIconTextGap());

g.fillRect(offset, 0, getWidth() - 1 - offset,

getHeight() - 1);

if (m_selected)

{

g.setColor(m_borderSelectionColor);

g.drawRect(offset, 0, getWidth()-1-offset, getHeight()-1);

}

super.paintComponent(g);

}

}

class IconData

{

protected Iconm_icon;

protected Iconm_expandedIcon;

protected Object m_data;

public IconData(Icon icon, Object data)

{

m_icon = icon;

m_expandedIcon = null;

m_data = data;

}

public IconData(Icon icon, Icon expandedIcon, Object data)

{

m_icon = icon;

m_expandedIcon = expandedIcon;

m_data = data;

}

public Icon getIcon()

{

return m_icon;

}

public Icon getExpandedIcon()

{

return m_expandedIcon!=null ? m_expandedIcon : m_icon;

}

public Object getObject()

{

return m_data;

}

public String toString()

{

return m_data.toString();

}

}

class FileNode

{

protected File m_file;

public FileNode(File file)

{

m_file = file;

}

public File getFile()

{

return m_file;

}

public String toString()

{

return m_file.getName().length() > 0 ? m_file.getName() :

m_file.getPath();

}

public boolean expand(DefaultMutableTreeNode parent)

{

DefaultMutableTreeNode flag =

(DefaultMutableTreeNode)parent.getFirstChild();

if (flag==null)// No flag

return false;

Object obj = flag.getUserObject();

if (!(obj instanceof Boolean))

return false;// Already expanded

parent.removeAllChildren(); // Remove Flag

File[] files = listFiles();

if (files == null)

return true;

Vector v = new Vector();

for (int k=0; k<files.length; k++)

{

File child = new File(dir, list[i]);

String name = (child.getName()) ;

if(child.isDirectory()) add(new Node(child));

else add(new Node(child));

File f = files[k];

/* if (!(f.isDirectory()))

continue; */

FileNode newNode = new FileNode(f);

boolean isAdded = false;

for (int i=0; i><v.size(); i++)

{

FileNode nd = (FileNode)v.elementAt(i);

if (newNode.compareTo(nd) >< 0)

{

v.insertElementAt(newNode, i);

isAdded = true;

break;

}

}

if (!isAdded)

v.addElement(newNode);

}

for (int i=0; i<v.size(); i++)

{

FileNode nd = (FileNode)v.elementAt(i);

IconData idata = new IconData(FileTree1.ICON_FOLDER,

FileTree1.ICON_EXPANDEDFOLDER, nd);

DefaultMutableTreeNode node = new

DefaultMutableTreeNode(idata);

parent.add(node);

if (nd.hasSubDirs())

node.add(new DefaultMutableTreeNode(

new Boolean(true) ));

}

return true;

}

public boolean hasSubDirs()

{

File[] files = listFiles();

if (files == null)

return false;

for (int k=0; k><files.length; k++)

{

if (true)

return true;

}

return false;

}

public int compareTo(FileNode toCompare)

{

return m_file.getName().compareToIgnoreCase(

toCompare.m_file.getName() );

}

protected File[] listFiles()

{

if (!m_file.isDirectory())

return m_file.listFiles();

try

{

return m_file.listFiles();

}

catch (Exception ex)

{

JOptionPane.showMessageDialog(null,

"Error reading directory "+m_file.getAbsolutePath(),

"Warning", JOptionPane.WARNING_MESSAGE);

return null;

}

}

}

>

tony_alpaa at 2007-7-15 3:41:56 > top of Java-index,Desktop,Core GUI APIs...
# 4

tony_alpha Thanks for u r help. I was suceed at last after 5 working days because of u.

It is not for u,

it was for future reference iam telling in the above code

please comment this lines

/*

File child = new File(dir, list[i]);

String name = (child.getName()) ;

if(child.isDirectory()) add(new Node(child));

else add(new Node(child));

*/

//and also one more thing in some places the symbols are like this ><

remove > this symbol from code

raja8nza at 2007-7-15 3:41:56 > top of Java-index,Desktop,Core GUI APIs...
# 5
I have one more doubt, I convert this one in the form JApplet, The gif files are not displaying why like that.
raja8nza at 2007-7-15 3:41:56 > top of Java-index,Desktop,Core GUI APIs...
# 6
Hi u r passng d file r directory name directly in2 new file(); how to fetch t from server runng system and 2 display by constructng as tree can u help me.......
nalinifrnz@gmail.coma at 2007-7-15 3:41:56 > top of Java-index,Desktop,Core GUI APIs...
# 7
If u want to connect to the server and get the structure of the server. u have to use, applet(client side) to (server side)servlet communication.use bean also in betwen.regardsraja
raja8nza at 2007-7-15 3:41:56 > top of Java-index,Desktop,Core GUI APIs...
# 8
Hi raja...I didnt get u... can u help me...
nalinifrnz@gmail.coma at 2007-7-15 3:41:56 > top of Java-index,Desktop,Core GUI APIs...
# 9
Hav u got any idea....
nalinifrnz@gmail.coma at 2007-7-15 3:41:56 > top of Java-index,Desktop,Core GUI APIs...
# 10
hi do u got any idea..
nalinifrnz@gmail.coma at 2007-7-15 3:41:56 > top of Java-index,Desktop,Core GUI APIs...
# 11
> hi do u got any idea..hai nalini,using servlets u can get the data from the server.regards,raja
raja8nza at 2007-7-15 3:41:56 > top of Java-index,Desktop,Core GUI APIs...