# swt tree abfüllen



## tinella (1. Februar 2006)

*hallo leute*

kann mir _bitte _jemand helfen...
ich habe eine suchfunktion welche alle ordner mit unterordnern (rekursiv) nach jarfiles absucht und die gefundenen elemente in einen vektor abfüllt.

ich muss jetzt einen swt mit diesen jarfiles plus pfad abfüllen.
also zb so:

ordner1
a.jar
    unterordner1.1
    b.jar
    c.jar
        unterunterordner1.1.1
        d.jar
        e.jar
ordner2
f.jar


wie bring ich es hin, dass es mir den string (pfad und jarname) von ordner 1.1 und 1.1.1 _unter_ den ordner1 hinzufügt?

könnte mir bitte jemand ein beispiel / nützlicher link nennen?


vielen dank im voraus


----------



## elmato (1. Februar 2006)

Schau mal bei 
http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/SWTTree.htm


----------



## Thomas Darimont (1. Februar 2006)

Hallo!

Also ich würde das nicht mit purem SWT machen und JFace als SWT Aufsatz verwenden:

```
/**
 * 
 */
package de.tutorials;

import java.io.File;

import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

/**
 * @author Tom
 * 
 */
public class JFaceTreeExample extends ApplicationWindow {

    public JFaceTreeExample(Shell parentShell) {
        super(parentShell);
    }

    protected Control createContents(Composite parent) {
        getShell().setText("JFaceTreeExample");
        parent.setSize(640, 480);
        TreeViewer treeViewer = new TreeViewer(parent);
        treeViewer.setContentProvider(new FileContentProvider());
        treeViewer.setLabelProvider(new FileNameLabelProvider());
        treeViewer.setInput(new File("E:/springframework/2.0M1"));
        treeViewer.addFilter(new ViewerFilter() {
            public boolean select(Viewer viewer, Object parentElement,
                    Object element) {
                File currentFile = (File) element;
                return currentFile.isDirectory() ? directoryContainsJar(currentFile)
                        : isJarFile(currentFile);
            }

            private boolean directoryContainsJar(File currentDirectory) {
                File[] files = currentDirectory.listFiles();

                boolean containsJarFile = false;
                for (int i = 0; files != null && i < files.length && !containsJarFile; i++) {
                    if (files[i].isDirectory()) {
                        containsJarFile = directoryContainsJar(files[i]);
                    } else {
                        containsJarFile = isJarFile(files[i]);
                    }
                }

                return containsJarFile;
            }

            private boolean isJarFile(File currentFile) {
                return currentFile.getName().endsWith(".jar");
            }
        });

        return super.createContents(parent);
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        ApplicationWindow applicationWindow = new JFaceTreeExample(null);
        applicationWindow.setBlockOnOpen(true);
        applicationWindow.open();
        Display.getCurrent().dispose();
    }

    public class FileContentProvider implements ITreeContentProvider {
        public Object[] getChildren(Object parentElement) {
            return ((File) parentElement).listFiles();
        }

        public Object getParent(Object element) {
            return ((File) element).getParentFile();
        }

        public boolean hasChildren(Object element) {
            String[] files = ((File) element).list();
            return files != null && files.length > 0;
        }

        public Object[] getElements(Object inputElement) {
            return getChildren(inputElement);
        }

        public void dispose() {
        }

        public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
        }
    }

    public class FileNameLabelProvider implements ILabelProvider {
        public Image getImage(Object element) {
            return null;
        }

        public String getText(Object element) {
            return ((File) element).getName();
        }

        public void addListener(ILabelProviderListener listener) {
        }

        public void dispose() {
        }

        public boolean isLabelProperty(Object element, String property) {
            return false;
        }

        public void removeListener(ILabelProviderListener listener) {
        }
    }
}
```

Classpath Erweiterungen:

```
org.eclipse.core.runtime_3.1.1.jar
org.eclipse.jface_3.1.1.jar
org.eclipse.swt.win32.win32.x86_3.1.1.jar
```

Vor einiger Zeit hast du ja mal geschrieben, dass du das gerne als Eclipse Plugin bauen möchtest. Wie damals würde ich dir empfehlen einfach die in Eclipse integrierte Suche für deine Zwecke zu verwenden und eventuell zu erweitern... (in Eclipse ist ja so ziemlich alles erweiterbar, auch die Suche denn die ist auch ein Plugin ;-)

hier: http://www.tutorials.de/forum/java/235854-bilder-fuer-applikation.html?highlight=JFaceTreeExample
noch eine Version mit icons.

Gruß Tom


----------



## tinella (2. Februar 2006)

Hey Tom

Danke für den Beispielcode!
Kannst du mir bitte verraten, wo ich die erwähnten .jar Files her bekomme?
In Google sind sie nicht zu finden


----------



## Thomas Darimont (2. Februar 2006)

Hallo!

Die jars findest du im Plugins-Verzeichnis deiner Eclipse Installation. 
Bei Eclipse > 3.1 liegen sie direkt unter ./plugins und bei Eclipse < 3.1 liegen sie in ./plugins/PLUGIN-NAME/

Denke daran, dass du die Anwendung nicht als Java Anwendung sondern als SWT Anwendung starten musst.

Gruss Tom


----------

