swt tree abfüllen

tinella

Erfahrenes Mitglied
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
 
Hallo!

Also ich würde das nicht mit purem SWT machen und JFace als SWT Aufsatz verwenden:
Code:
/**
 * 
 */
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:
Code:
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
 

Anhänge

  • jfaceTreeExample.jpg
    jfaceTreeExample.jpg
    20,7 KB · Aufrufe: 328
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 :confused:
 
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
 
Zurück