aspose file tools*
The moose likes Swing / AWT / SWT and the fly likes Accessing image files of user entered paths Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Swing / AWT / SWT
Bookmark "Accessing image files of user entered paths" Watch "Accessing image files of user entered paths" New topic
Author

Accessing image files of user entered paths

Manoj Paul
Ranch Hand

Joined: Jan 18, 2007
Posts: 112
hi friends...

I am summarisizing my problems as follows...
*********************************************

My A.class file is in D:\Manshine\Swings folder
My images files is in D:\Manshine\Swings\images folder

When i am executing my program, as i click on a tree and goes to the
structure D:\Manshine\Swings\images everything is fine with it, it shows all the images one by one...
But when i m selecting any other structure say c:\images or d:\images, its not working although these folders also contains images of same type...

And the variable that holds the absolutepath is showing the right path..

*********************************************

Please help...
shyam shridhar
Ranch Hand

Joined: Sep 15, 2006
Posts: 31
put your code here..
Manoj Paul
Ranch Hand

Joined: Jan 18, 2007
Posts: 112
// First page displaying the tree structure

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.text.SimpleDateFormat;

import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;
import java.awt.Dimension;
import java.awt.Panel;
import java.awt.BorderLayout;
import java.awt.Rectangle;

import javax.swing.JEditorPane;
import javax.swing.JTextArea;

public class FileTree2
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");

// public ScrollDemo sd=null;

protected JTree m_tree;
protected DefaultTreeModel m_model;
protected JTextField m_display;

// NEW
protected JPopupMenu m_popup;
protected Action m_action;
protected TreePath m_clickedPath;


private Vector imageNames;
private JLabel picture;
private JList list;
private JSplitPane splitPane;


public FileTree2()
{
super("Directories Tree [Popup Menus]");
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");

// sd.createAndShowGUI("FavCar.jpg");

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);

/*
* And
* the
* file
* display
* goes
* here
**/































// NEW
m_popup = new JPopupMenu();
m_action = new AbstractAction()
{
public void actionPerformed(ActionEvent e)
{
if (m_clickedPath==null)
return;
if (m_tree.isExpanded(m_clickedPath))
m_tree.collapsePath(m_clickedPath);
else
m_tree.expandPath(m_clickedPath);
}
};
m_popup.add(m_action);
m_popup.addSeparator();

Action a1 = new AbstractAction("Delete")
{
public void actionPerformed(ActionEvent e)
{
m_tree.repaint();
JOptionPane.showMessageDialog(FileTree2.this,
"Delete option is not implemented",
"Info", JOptionPane.INFORMATION_MESSAGE);
}
};
m_popup.add(a1);

Action a2 = new AbstractAction("Rename")
{
public void actionPerformed(ActionEvent e)
{
m_tree.repaint();
JOptionPane.showMessageDialog(FileTree2.this,
"Rename option is not implemented",
"Info", JOptionPane.INFORMATION_MESSAGE);
}
};
m_popup.add(a2);
m_tree.add(m_popup);
m_tree.addMouseListener(new PopupTrigger());

WindowListener wndCloser = new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
};
addWindowListener(wndCloser);

setVisible(true);
try
{
jbInit();
}
catch(Exception e)
{
e.printStackTrace();
}

}

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;
}

// NEW
class PopupTrigger extends MouseAdapter
{
public void mouseReleased(MouseEvent e)
{
if (e.isPopupTrigger())
{
int x = e.getX();
int y = e.getY();
TreePath path = m_tree.getPathForLocation(x, y);
if (path != null)
{
if (m_tree.isExpanded(path))
m_action.putValue(Action.NAME, "Collapse");
else
m_action.putValue(Action.NAME, "Expand");
m_popup.show(m_tree, x, y);
m_clickedPath = path;
}
}
}
}

// 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());

String holdPath=fnode.getFile().getAbsolutePath();

System.out.println("Path ::"+holdPath);

File myDirectory = new File(fnode.getFile().getAbsolutePath());

if ( myDirectory.exists() && myDirectory.isDirectory() )
{
// List the files
String[] fileNameList = myDirectory.list();
String holdFiles="";

for(int u=0;u<fileNameList.length;u++)
{
// System.out.println("File "+(u+1)+":: "+fileNameList[u]);

holdFiles=holdFiles+" "+fileNameList[u];
}

// System.out.println("Files :: " +holdFiles);

SplitPane obj=new SplitPane();
obj.show(holdFiles,holdPath);
}
}
else
{
m_display.setText("");
}
}
}

public static void main(String argv[])
{
new FileTree2();
}

private void jbInit() throws Exception
{
this.setSize(new Dimension(752, 303));
this.getContentPane().setLayout(null);
//ScrollDemo obj=new ScrollDemo();
}
}

class IconCellRenderer
extends JLabel
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 Icon m_icon;
protected Icon m_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 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(FileTree2.ICON_FOLDER,
FileTree2.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 (files[k].isDirectory())
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())
{
JOptionPane.showMessageDialog(null,"Error reading directory "+m_file.getAbsolutePath(),"Warning", JOptionPane.WARNING_MESSAGE);
return null;
}
try
{
return m_file.listFiles();
}
catch (Exception ex)
{
JOptionPane.showMessageDialog(null,
"Error reading directory "+m_file.getAbsolutePath(),
"Warning", JOptionPane.WARNING_MESSAGE);
return null;
}
}
}
Manoj Paul
Ranch Hand

Joined: Jan 18, 2007
Posts: 112
// Second page displaying the images

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;

import java.util.*;

//SplitPane itself is not a visible component.
public class SplitPane implements ListSelectionListener {
private Vector imageNames;
private JLabel picture;
private JList list;
private JSplitPane splitPane;

String path="";
String imageNamesString="";

public SplitPane()
{

}
public SplitPane(String holdFiles,String holdPath)
{
path=holdPath.replace('\\','/');

try
{


imageNamesString =holdFiles;

imageNames = parseList(imageNamesString);
}
catch (MissingResourceException e)
{
handleMissingResource(e);
}

//Create the list of images and put it in a scroll pane.
list = new JList(imageNames);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setSelectedIndex(0);
list.addListSelectionListener(this);
JScrollPane listScrollPane = new JScrollPane(list);

//Set up the picture label and put it in a scroll pane.
ImageIcon firstImage = createImageIcon(path+"/"+(String)imageNames.firstElement());
if (firstImage != null)
{
picture = new JLabel(firstImage);
}
else
{
picture = new JLabel((String)imageNames.firstElement());
}

JScrollPane pictureScrollPane = new JScrollPane(picture);

//Create a split pane with the two scroll panes in it.
splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
listScrollPane, pictureScrollPane);
splitPane.setOneTouchExpandable(true);
splitPane.setDividerLocation(150);

//Provide minimum sizes for the two components in the split pane.
Dimension minimumSize = new Dimension(100, 50);
listScrollPane.setMinimumSize(minimumSize);
pictureScrollPane.setMinimumSize(minimumSize);

//Provide a preferred size for the split pane.
splitPane.setPreferredSize(new Dimension(400, 200));
}

//Used by SplitPaneDemo2
public JList getImageList() {
return list;
}

public JSplitPane getSplitPane() {
return splitPane;
}

public void valueChanged(ListSelectionEvent e)
{

System.out.println("Hi Hi Hi");
System.out.println("pathfind:: "+path);

if (e.getValueIsAdjusting())
{
System.out.println("Check");
return;
}

JList theList = (JList)e.getSource();
if (theList.isSelectionEmpty())
{
picture.setIcon(null);
picture.setText(null);
}
else
{
int index = theList.getSelectedIndex();
ImageIcon newImage = createImageIcon(path+"/" +(String)imageNames.elementAt(index));
// ImageIcon newImage = createImageIcon("images/" +(String)imageNames.elementAt(index));
picture.setIcon(newImage);
if (newImage != null)
{
picture.setText(null);
}
else
{
picture.setText("Image not found: "
+ (String)imageNames.elementAt(index));
}
}
}

protected static Vector parseList(String theStringList) {
Vector<String> v = new Vector<String>(10);
StringTokenizer tokenizer = new StringTokenizer(theStringList, " ");
while (tokenizer.hasMoreTokens()) {
String image = tokenizer.nextToken();
v.addElement(image);
}
return v;
}

/** Called when the image property file can't be found. */
private void handleMissingResource(MissingResourceException e) {
System.err.println();
System.err.println("Can't find the properties file " +
"that contains the image names.");
System.err.println("Its name should be imagenames.properties, " +
"and it should");
System.err.println("contain a single line that specifies " +
"one or more image");
System.err.println("files to be found in a directory " +
"named images. Example:");
System.err.println();
System.err.println(" images=Bird.gif Cat.gif Dog.gif");
System.err.println();
throw(e); //Used to be exit(1), but that causes the console to
//go away under Java Web Start; this way, you're
//more likely to see a relevant error message.
}

/** Returns an ImageIcon, or null if the path was invalid. */
protected static ImageIcon createImageIcon(String path) {
java.net.URL imgURL = SplitPane.class.getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}

/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI(String holdFiles, String holdPath) {

//Create and set up the window.
String filesHold=holdFiles;
String pathHold=holdPath;

JFrame frame = new JFrame("SplitPane");
// frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SplitPane splitPaneDemo = new SplitPane(filesHold,pathHold);
frame.getContentPane().add(splitPaneDemo.getSplitPane());

//Display the window.
frame.pack();
frame.setVisible(true);
}

public void show(String hfiles,String hpath)
{
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
final String files=hfiles;
final String path=hpath;

javax.swing.SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
createAndShowGUI(files,path);
}
});
}
}
shyam shridhar
Ranch Hand

Joined: Sep 15, 2006
Posts: 31
Check this line i thing problem is here.

java.net.URL imgURL = SplitPane.class.getResource(path);

Is this return right path...
Manoj Paul
Ranch Hand

Joined: Jan 18, 2007
Posts: 112
Yes Mr.Shriram you are right... its returning null as i found out... can you please suggest me a better solution..
Thank you once again
 
Consider Paul's rocket mass heater.
 
subject: Accessing image files of user entered paths