Hallo Zusammen,
ich bin jetzt schon seit Wochen dran mein eigenen Explorer für ein Progrämmchen zusammen zu klicken.
Ich habe auch eine Lösung die schon ganz gut passt. Nur fehlt eine wichtige Eigenschaft und ich hoffe das die Pro's hier im Forum mir helfen können um den nötigen Code hierfür zu ergänzen.
Also ich habe einen JTree der mir die Laufwerke und deren Ordner anzeigt. Nun will ich das auch die Dateien angezeigt werden. ABER - WICHTIG - nicht alle Dateien. Nur die, die mit den Endungen txt, jpg und png enden. Im Prinzip hätte ich gern den Windows-Explorer mit Dateiendungsfilter
Hier den JTree an dem ich schon seit Wochen das Problem versuche zu lösen...
mfg
pabu
ich bin jetzt schon seit Wochen dran mein eigenen Explorer für ein Progrämmchen zusammen zu klicken.
Ich habe auch eine Lösung die schon ganz gut passt. Nur fehlt eine wichtige Eigenschaft und ich hoffe das die Pro's hier im Forum mir helfen können um den nötigen Code hierfür zu ergänzen.
Also ich habe einen JTree der mir die Laufwerke und deren Ordner anzeigt. Nun will ich das auch die Dateien angezeigt werden. ABER - WICHTIG - nicht alle Dateien. Nur die, die mit den Endungen txt, jpg und png enden. Im Prinzip hätte ich gern den Windows-Explorer mit Dateiendungsfilter
Hier den JTree an dem ich schon seit Wochen das Problem versuche zu lösen...
Code:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author pabu
*/
import java.awt.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;
public class DirTree extends JScrollPane {
public static final ImageIcon ICON_COMPUTER = new ImageIcon("D:/Projekte/2009-11/Java_GUI/Conti_Tree/Icons/monitor.png");
public static final ImageIcon ICON_DISK = new ImageIcon("D:/Projekte/2009-11/Java_GUI/Conti_Tree/Icons/festplatte.png");
public static final ImageIcon ICON_FOLDER = new ImageIcon("D:/Projekte/2009-11/Java_GUI/Conti_Tree/Icons/ordner_zu.png");
public static final ImageIcon ICON_EXPANDEDFOLDER = new ImageIcon("D:/Projekte/2009-11/Java_GUI/Conti_Tree/Icons/ordner_auf.png");
protected JTree m_tree;
protected DefaultTreeModel m_model;
public DirTree() {
super();
DefaultMutableTreeNode top = new DefaultMutableTreeNode(new IconData(ICON_COMPUTER, null, "Computer"));
DefaultMutableTreeNode node;
File[] roots = File.listRoots(); // START - Befüllung des Baumes
for (int k=0; k<roots.length; k++) { // Es werden alle Laufwerke
node = new DefaultMutableTreeNode(new IconData(ICON_DISK, // eingelesen die generell
null, new FileNode(roots[k]))); // an diesem Rechner verfügbar
top.add(node); // sind und in den Baum
node.add(new DefaultMutableTreeNode(new Boolean(true))); // eingefügt
} // ENDE - Befüllung des Baumes
m_model = new DefaultTreeModel(top);
m_tree = new JTree(m_model);
m_tree.putClientProperty("JTree.lineStyle", "Angled");
IconCellRenderer renderer = new IconCellRenderer();
m_tree.setCellRenderer(renderer);
m_tree.addTreeExpansionListener(new DirExpansionListener());
m_tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
m_tree.setShowsRootHandles(true);
m_tree.setEditable(false);
this.getViewport().add(m_tree);
}
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) {}
}
public static void main(String argv[]) {
JFrame frame = new JFrame();
DirTree scrollTree = new DirTree();
frame.setSize(200,300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(scrollTree);
frame.setVisible(true);
}
}
class IconCellRenderer extends DefaultTreeCellRenderer {
public IconCellRenderer() {
setLeafIcon(null);
setOpenIcon(null);
}
public Component getTreeCellRendererComponent(JTree tree,
Object value, boolean sel, boolean expanded, boolean leaf,
int row, boolean hasFocus) {
// Invoke default implementation
Component result = super.getTreeCellRendererComponent(tree,
value, sel, expanded, leaf, row, 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);
return result;
}
}
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();
}
// Alternatively we copud sub-class TreeNode
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(DirTree.ICON_FOLDER,
DirTree.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())
return null;
try {
return m_file.listFiles();
}
catch (Exception ex) {
return null;
}
}
}
mfg
pabu