Ola pessoal,
Tenho uma JTree que é uma arvore de diretorio em um JPanel, e no JPanel de baixo quero mostrar os arquivos daquele diretorio selecionado no panel de cima. Já tentei fazê-lo de mil formas mas não consegui, em outro fórum me sugeriram criar outra arvore no panel de baixo, apenas mostrando os arquivos. Estou tentando fazer mas nao estou conseguindo, estou criando a arvore no método que trata eventos da arvore de cima (a dos diretorios).
Segue a imagem:

Abaixo passo o código:
public class GUIRainfallGauges extends JFrame implements TreeSelectionListener{
private static final long serialVersionUID = 1L;
private JTree tree;
private JTree treeFiles;
DefaultTreeCellRenderer renderer;
private JPanel panelButtons;
private JPanel panelLeft;
private JScrollPane panelDir;
private JScrollPane panelFiles;
private JButton btnImportExportArray10;
private JButton btnImportExportArray20;
private JButton btnExportData;
private JButton btnChart;
private JButton btnClose;
private JButton btnOneGauge;
private JButton btnAllGauges;
private JFileChooser chooser;
private JTable tblRainfallGaugesData;
private ArrayList<ACM_Gauge> gauges;
private BEER beer;
static {JFrame.setDefaultLookAndFeelDecorated(true);}
public GUIRainfallGauges(BEER beer){
super("Rainfall gauges");
if (beer != null){
this.beer = beer;
if (this.beer.getWatershed().getRainfallGauges().size() != 0)
this.gauges = beer.getWatershed().getRainfallGauges();
}
this.createAndShowGUI();
this.createFileChooser();
this.pack();
this.setVisible(true);
}
private void createAndShowGUI() {
this.setBounds(100, 200, 530, 370);
this.setPreferredSize(new Dimension(530, 370));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
this.setLayout(null);
this.formatPanelButtons();
this.formatPanelTree();
if (this.gauges != null){
this.insertDataIntoTable();
}
}
private void formatPanelTree(){
this.panelLeft = new JPanel(new GridLayout(1,0));
this.panelLeft.setBackground(this.getBackground());
this.panelLeft.setBounds(20, 20, 340, 300);
this.panelLeft.setVisible(true);
//building tree
this.tree = this.buildTreeDirectories();
this.tree.setRootVisible(false);
this.tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
this.renderer = (DefaultTreeCellRenderer)this.tree.getCellRenderer();
this.renderer.setLeafIcon(this.renderer.getDefaultOpenIcon());
this.tree.setVisible(true);
tree.addTreeSelectionListener(this);
this.formatPanelTreeOfDirectories();
this.formatPanelTreeFiles();
JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
splitPane.setTopComponent(this.panelDir);
splitPane.setBottomComponent(this.panelFiles);
Dimension minimumSize = new Dimension(100,50);
this.panelDir.setMinimumSize(minimumSize);
this.panelFiles.setMinimumSize(minimumSize);
splitPane.setDividerLocation(150);
splitPane.setPreferredSize(new Dimension(500,300));
splitPane.setVisible(true);
this.panelLeft.add(splitPane);
this.add(this.panelLeft);
}
private void formatPanelTreeFiles() {
this.panelFiles = new JScrollPane();
this.panelFiles.setBorder(new EtchedBorder());
// this.panelFiles.setBackground(Color.WHITE);
this.panelFiles.setVisible(true);
}
private void formatPanelTreeOfDirectories() {
this.panelDir = new JScrollPane(this.tree);
this.panelDir.setBorder(new EtchedBorder());
this.panelDir.setVisible(true);
}
public JTree buildTreeDirectories(){
DefaultMutableTreeNode root = new DefaultMutableTreeNode("root", true);
this.getListFiles(root, new File("C:/Arquivos de programas/Java/"));
JTree tree = new JTree(root);
return tree;
}
private void getListFiles(DefaultMutableTreeNode node, File f) {
if(!f.isDirectory()){
// DefaultMutableTreeNode childFile = new DefaultMutableTreeNode(f);
// node.add(childFile);
}
else{
DefaultMutableTreeNode child = new DefaultMutableTreeNode(f);
node.add(child);
File fileList[] = f.listFiles();
for(int i = 0; i < fileList.length; i++)
getListFiles(child, fileList[i]);
}
}
private void formatPanelButtons(){...}
public void valueChanged(TreeSelectionEvent e) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode)
tree.getLastSelectedPathComponent();
if(node==null) return;
File fileChild = (File)node.getUserObject();
//aqui é a parte em que ele deveria "contruir" o painel de baixo.
this.treeFiles = this.buildTreeFiles(node, fileChild);
this.treeFiles.setRootVisible(true);
this.treeFiles.setVisible(true);
this.panelFiles.add(this.treeFiles);
}
private JTree buildTreeFiles(DefaultMutableTreeNode node, File dir) {
int cont=0;
JTree tree;
File[] filesAndDir;
File[] onlyFiles;
//armazena em filesAndDir todos os arquivos e diretorios contidos em dir
filesAndDir = dir.listFiles();
//conta tão somente quantos arquivos contém em filesAndDir
for (int i = 0; i < filesAndDir.length; i++)
if(filesAndDir[i].isFile())
cont++;
//um array somente com os arquivos contido na pasta dir
onlyFiles = new File[cont];
// for (int i = 0; i < onlyFiles.length; i++) {
// System.out.println(onlyFiles[i].getName());
// }
for (int i = 0; i < onlyFiles.length; i++) {
if(onlyFiles[i].isDirectory());
else{
DefaultMutableTreeNode child = new DefaultMutableTreeNode(onlyFiles[i]);
node.add(child);
}
}
tree = new JTree(node);
return tree;
}
}
Tá rolando uma exceção java.lang.NullPointerException no método buildTreeFiles na linha que tem:
if(onlyFiles[i].isDirectory());
Eu acho que é porque não devo fazer isto no método que trata o evento, mas eu sinceramente não sei onde devo fazê-lo, já que eu quero que liste na arvore de baixo apenas os arquivos do diretorios selecionados da arvore de cima. :sad:
Espero que possam me ajudar 
[]'s [/i]