Jump to content
kikoo

explorador windows numa jtree

Recommended Posts

kikoo

ola gostava de fazer um explorador igual ao do windows numa jtree, ja andei a pesquisar e nao consigo precisava de ajuda, obrigada.

Share this post


Link to post
Share on other sites
Knitter

Onde é que tens dúvidas? Fazer um explorador não é uma tarefa simples, dependendo do resultado final que pretendes pode exigir saberes trabalhar bem com Swing ou com SWT.

Share this post


Link to post
Share on other sites
kikoo

a minha duvida esta em ir buscar a lista de todos os directorios do disco e meter da jtree

Share this post


Link to post
Share on other sites
Knitter

A classe File terá todos, o quase todos os métodos que precisas. Inicialmente o método listRoots() dar-te-á uma lista de drives, atenção que o que ele devolve em sistemas UNIX é diferente do que devolve em sistemas Windows (neste último dá-te as drives A:, B:, C:, etc). Depois podes pegar nesses valores e ir obtendo os ficheiros que lá estão dentro com o método listFiles, que te devolve um array de objectos File representado o conteúdo de uma directoria.

Tens métodos para ver se estás a lidar com uma directoria, isDirectory, com um ficheiro, isFile, ou se os ficheiros/directorias estão ocultos, isHidden.

Basicamente é usar estes métodos para obter informação genérica sobre os ficheiros no disco.

Para criares a árvore terás de criar os nós tu mesmo, vê este tutorial de Oracle sobre a utilização de JTree que dá uma boa visão de como manipular o componente, http://download.oracle.com/javase/tutorial/uiswing/components/tree.html.

Share this post


Link to post
Share on other sites
kikoo

import javax.swing.tree.*;
import javax.swing.event.*;
import java.io.File;

public class Arvore extends JFrame implements ActionListener {

    private JTextField campo;
    private JButton botao;
    private JPanel painelCima;
    private JPanel painelBaixo;
    private JTree arvore;

    public Arvore() {
        super("Browser");
        getContentPane().setLayout(new BorderLayout());
        campo = new JTextField();
        botao = new JButton("Procurar");
        painelCima = new JPanel(new BorderLayout());
        painelBaixo = new JPanel(new GridLayout(1, 1));
        arvore = new JTree();
        botao.addActionListener(this);
        campo.addActionListener(this);

        painelCima.add(campo, BorderLayout.CENTER);
        painelCima.add(botao, BorderLayout.EAST);

        getContentPane().add(painelCima, BorderLayout.NORTH);
        getContentPane().add(painelBaixo, BorderLayout.CENTER);

        this.setSize(250, 350);
        this.setVisible(true);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public void actionPerformed(ActionEvent e) {

        DefaultMutableTreeNode pai = new DefaultMutableTreeNode(campo.getText());
        varre(campo.getText(), pai);
        arvore = new JTree(pai);
        painelBaixo.removeAll();
        painelBaixo.add(new JScrollPane(arvore));
        getContentPane().validate();
    }

    public void varre(String base, DefaultMutableTreeNode no) {

        File diretorio = new File(base);
        File[] conteudo = diretorio.listFiles();

        for (int i = 0; i < conteudo.length; i++) {

            if (conteudo[i].isFile()) {
                DefaultMutableTreeNode arquivo = new DefaultMutableTreeNode(conteudo[i].getName());
                no.add(arquivo);
            } else {
                DefaultMutableTreeNode dir = new DefaultMutableTreeNode(conteudo[i].getName());
                varre(conteudo[i].toString(), dir);
                no.add(dir);
            }
        }
    }

    public static void main(String args[]) {
        new Arvore();
    }
}

este é o meu codigo mas se meter so para ver os directorios do disco ele nao da. obrigada

Share this post


Link to post
Share on other sites
Knitter

Tens um erro no código, dentro do for que usas para percorrer os ficheiros, o if devia ter aí uns parêntesis rectos para acesso a posição de array. O mesmo para os vários getName.

Além disso, o método listFiles pode devolver null e não estás a testar isso. Em vez de tentares colocar já um JFrame e uma JTree porque é que não usas uma simples classe que apenas mostre na consola, com o System.out.println os ficheiros da raiz do teu disco? Depois avanças um passo de cada vez para veres como resolver os outros problemas.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.