Boa tarde galera!
Gostaria de uma ajudinha de vcs, pois eu não encontrei uma solução ainda para o meu problema.
Tenho uma interface de relatórios em uma JTree, estou querendo que quando eu clique em um
nó filho ele da um print no nome dele e assim que eu fechar a pasta que contem aquele arquivo
ele tire a seleção do nó interno da pasta. Simplesmente quero que quando eu fechar a hierarquia
o nó filho não fique com seleção, pois está dando erro por isso, quando eu seleciono o nó filho ele
printa na tela, quando eu fecho a pasta com ele selecionado da erro, sem ele estar selecionado não dá.
Vou postar os códigos aqui para analise dos amigos:
Classe que monta a JTree com os nós.
[code]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); //se forem executar mudar o diretório
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();
}
}
[/code]
Classe de evento que printa cada seleção de nó.
[code]package view;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
public class SelectionListener implements TreeSelectionListener {
public void valueChanged(TreeSelectionEvent se) {
JTree tree = (JTree)se.getSource();
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
String selectedNodeName = selectedNode.toString();
if (selectedNode.isLeaf()) {
System.out.println(selectedNodeName);
}
}
}
[/code]
Quando gera o erro dá um NullPointException
Obrigado a todos.