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!