Bom pessoal, minha dúvida é a seguinte.
Tenho uma Jtree num painel a esquerda e uma JTable num painel a direita.
Quando clico em algum no da JTree, o nó se expande e seu conteúdo é exibido na JTable.
Ao dar dois cliques em uma linha da minha JTable, e se ela possuir filhos(correspondente a tree), minha JTable é populada novamente com os filhos do item clicado.
O que eu nao estou conseguindo é dar foco na minha JTree no nó selecionado na JTable. Também quero que quando minha JTree ganhar foco no nó selecionado, o mesmo se expanda.
Alguém aí pode me ajudar?
Ah, esqueci de dizer. Minha tree possui um listener deste tipo:
tree.addTreeSelectionListener(new TreeSelectionListener()
{
public void valueChanged(TreeSelectionEvent event)
{
file = (File) tree.getLastSelectedPathComponent();
tree.expandPath(tree.getSelectionPath());
populateTable(file);
}
});
Bom pessoal,
Depois de quebrar um pouco a cabeça, consegui resolver meu problema. Segue abaixo o código:
public void setSelectedNode(File file)
{
try
{
String path = file.getPath();
ShellFolder shellFolder = ShellFolder.getShellFolder(file);
// Pastas de Sistema
if (file.getPath().contains("::"))
{
path = shellFolder.getDisplayName();
}
TreePath treePath = tree.getNextMatch(path, 1, Position.Bias.Forward);
tree.setSelectionPath(treePath);
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
Ao executar o comando…
tree.setSelectionPath(treePath);
…o listener abaixo é chamado
tree.addTreeSelectionListener(new TreeSelectionListener()
{
public void valueChanged(TreeSelectionEvent event)
{
File file = (File) tree.getLastSelectedPathComponent();
tree.expandPath(tree.getSelectionPath());
if (file != null)
{
populateTable(); //popula minha JTable com os filhos do diretorio selecionado
}
}
});
Como nada na vida é fácil, me deparei com outro problema.
Já que dentro do listener da tree temos o comando…
tree.expandPath(tree.getSelectionPath());
…o scroll da minha tree que esta dentro de um JScrollPane não acompanha os nodes que estão sendo selecionados e expandindo.
Já fiz alguns testes e descobri que se eu tirar o comando de expandir a tree de dentro do listener, o node expandido fica sempre visivel no
topo.
Como fazer para que o node expandido fique sempre no topo, sem ter que tirar tal comando de dentro do listener?