Como deixar um JTree aberta quando executar

0 respostas
diegogm

Bom dia galera!

Eu tenho uma interface com uma JTree num JFrame quando eu executo ela aparece tudo dentro do nó principal,
sendo necessário clicar no + para expandir, gostaria de quando ela executasse já ficasse com o nó pai aberto sem
ter a necessidade de clicar no +. Não estou conseguindo fazer isso, infelizmente não sou tão experiente assim com
Java maia estou me esforçando ao máximo.

Alguém pode me ajudar, estou levando uma surra dessa JTree em várias coisas kkkkk.

Segue o código pra vcs verem como eu construo ela:

package view;

import java.awt.BorderLayout;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.io.File;

import java.util.Enumeration;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JToolBar;
import javax.swing.JTree;
import javax.swing.SwingConstants;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;


public class Relatorios extends JFrame {

    private JPanel painelTreeAux = new JPanel(new BorderLayout());
    private JPanel painelTree = new JPanel(new BorderLayout());
    private JToolBar barBotoes = new JToolBar();
    private JButton btnInformaParametros = new JButton();
    private JButton btnListaRelatorios = new JButton();
    private JButton btnMontaRelatorio = new JButton();
    private JButton btnVoltar = new JButton();
    private JScrollPane scroll1;
    private DefaultMutableTreeNode rootNode;
    private JTree tree;
    private JSeparator separator;

    public Relatorios() {
        init();
    }

    public void init() {

        this.setTitle("Relatórios");
        this.setIconImage(new ImageIcon(getClass().getResource("/image/ICONE_TITULO.png")).getImage());
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(600, 650);

        this.setLocationRelativeTo(null);
        this.setResizable(false);
        painelTree.setLayout(null);
        painelTree.setSize(600, 650);
        this.add(painelTree);

        barBotoes.setBounds(0, 0, 195, 45);
        barBotoes.setFloatable(false);

        btnInformaParametros.setIcon(new javax.swing.ImageIcon(getClass().getResource("/image/BTS_Relatorios/BT_Informa_Parametros_Selecao.png")));
        btnListaRelatorios.setIcon(new javax.swing.ImageIcon(getClass().getResource("/image/BTS_Relatorios/BT_Lista_Relatorios.png")));
        btnMontaRelatorio.setIcon(new javax.swing.ImageIcon(getClass().getResource("/image/BTS_Relatorios/BT_Monta_Relatorio.png")));
        btnVoltar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/image/BTS_Relatorios/BT_Voltar.png")));

        barBotoes.add(btnInformaParametros);
        barBotoes.add(btnListaRelatorios);
        barBotoes.add(btnMontaRelatorio);
        barBotoes.add(btnVoltar);

        painelTree.add(barBotoes, BorderLayout.NORTH);

        rootNode = new DefaultMutableTreeNode("Relatórios");
        tree = new JTree(rootNode);
       
        scroll1 = new JScrollPane(tree);
        scroll1.setBounds(0, 45, 595, 400);
        painelTree.add(scroll1);

        tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
        tree.addTreeSelectionListener(new SelectionListener());

        separator = new JSeparator(SwingConstants.HORIZONTAL);
        painelTree.add(separator);
        separator.setBounds(0, 440, 600, 20);

        //Chama o método para popular o JTree
        listAllFiles("C:\\Users\\diego\\Desktop\\Relatorios", rootNode, true); //Mudar o diretório se caso for executar o código

        this.setVisible(true);

    }

    /**
     * @params: String directory - o diretório a trabalhar
     * @params: DefaultMutableTreeNode parent - o node pai
     * @params: Boolean recursive - determina se vai trabalhar com as subpastas, ou só o pai
     */

    public static void listAllFiles(String directory, DefaultMutableTreeNode parent, Boolean recursive) {
        // Lista todos os arquivos no diretório "String directory" no array "children"
        File[] children = new File(directory).listFiles();

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

            // Pega o nome de cada Pasta ou Arquivo
            DefaultMutableTreeNode node = new DefaultMutableTreeNode(children[i].getName());
            // Só mostra o Node se ele é uma pasta e se esta é uma chamada recursiva
            if (children[i].isDirectory() && recursive) {
                parent.add(node); // adiciona como filho
                listAllFiles(children[i].getPath(), node, recursive); // chamada recursiva para trabalhar com o filho
            } else if (!children[i].isDirectory()) { // senão caso não seja um diretório
                parent.add(node); // adiciona como um arquivo

            }
        }
    }

    public static void main(String[] args) {

        new Relatorios();
    }

}

Obrigado a todos pela ajuda!

Criado 14 de novembro de 2012
Respostas 0
Participantes 1