Avatar billede webster Nybegynder
05. maj 2003 - 22:52 Der er 1 kommentar og
1 løsning

JTree markering af subfolders

Hejsa

Jeg har lavet et program hvor jeg bruger en JTree komponent til at markere noget hirakisk data. Jeg har selv lavet den bagvedliggende datamodel ved at implementere TreeModel interfacet.

Metoden isLeaf(Object obj) har jeg implementeret således at hvis obj er et "mappe objekt" så returnerer den falsk. Dette giver de rigtige ikoner i forhold til mapper og mine tekst noder, men det medfører også at alle mapper har et "markeringstegn" der signalerer at der er undermapper. Dette tegn forsvinder ganske vidst når mappen "åbnes" men det er stadigt temmeligt irriterende. Er der nogen der har en idé til hvad jeg kan gøre således at kun de nodes med childs får et "+" tegn.
Avatar billede lifo Nybegynder
06. maj 2003 - 18:02 #1
i et program som jeg har lavet har jeg gjordt det således at
leef's altid vises som node's  ved følgende kode
og da er der ikke noget plus ved mapper som ikke har childes 

måske er det hjælp til en ide 

DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();
renderer.setLeafIcon(renderer.getDefaultClosedIcon( ));
serverTree.setCellRenderer(renderer);
Avatar billede viht Nybegynder
07. maj 2003 - 16:23 #2
Det nemmeste er at extends DefaultMutableTreeNode og override metoden public boolean isLeaf().

Jeg har selv brugt det i en filstruktur, hvor min extendede TreeNode klasse ser således ud:
import javax.swing.tree.DefaultMutableTreeNode;
import java.io.*;

public class FileNode extends DefaultMutableTreeNode {

    private File file;

    public FileNode(File file)    {
        this.file = file;
    }
    public boolean getAllowsChildren() { return file.isDirectory(); }
    public boolean isLeaf()     {
        File[] subs = file.listFiles(new DirFilter());
        if( subs.length == 0 )
            return true;
        return false;
    }
    public File getFile()        { return file; }

    public boolean isDirectory() {
        return file.isDirectory();
    }

    public String toString() {
        if( file.getName().equals("") )
            return file.getAbsolutePath();
        return file.getName();
    }
    public void explore() {
        File[] children = file.listFiles(new DirFilter());

        for(int i=0; i < children.length; ++i)
            add(new FileNode(children[i]));
    }
    private class DirFilter implements FileFilter {
      public boolean accept(File file) {
          return file.isDirectory() && !file.isHidden();
      }
  }
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester