Estou quebrando a cabeça para encontrar uma maneira de identificar antecipadamente quando o usuário tentar alterar o node selecionado. Necessito em alguns casos abortar (confirmação do usuário) esta tentativa de troca. Caso alguém teve algo parecido e puder compartilhar. Abraço.
Obs.: o único listener que encontrei (valueChanged) só é chamado após a mudança.
Estou quebrando a cabeça para encontrar uma maneira de identificar antecipadamente quando o usuário tentar alterar o node selecionado. Necessito em alguns casos abortar (confirmação do usuário) esta tentativa de troca. Caso alguém teve algo parecido e puder compartilhar. Abraço.
Obs.: o único listener que encontrei (valueChanged) só é chamado após a mudança.[/quote]
Oi,
Alterar o node selecionado ou altera o conteúdo dentro do node selecionado?
Acredito que eu não tenha explicado claramente. O que eu preciso fazer é identificar quando o usuário clica na arvore, na tentativa de trocar o node selecionado. E então antes de trocar o node selecionado apresentar uma mensagem ao usuário para que ele confirme, ou não, se deseja trocar o node selecionado pelo “novo”. Algo como “beforeChangeNode” (nome hipotético).
Á sim! Você pode usar o valueChange mesmo, porém tem que fazer um controlezinho na mão:
[code]private Object io_selection = null;
tree.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
// Recebe o caminho do node selecionado.
final TreePath lo_path = e.getNewLeadSelectionPath();
// Recebe o "nome" do node selecionado.
io_selection = io_selection == null
? ((DefaultMutableTreeNode)lo_path.getPathComponent(lo_path.getPathCount()-1)).getUserObject()
: io_selection
;
// Recebe o nome do atual node selecionado.
Object lo_atual_selection
= ((DefaultMutableTreeNode)lo_path.getPathComponent(lo_path.getPathCount()-1)).getUserObject();
// Se não forem iguais ...
if (!io_selection.equals(lo_atual_selection)) {
// MOSTRA A MENSAGEM
System.err.println("Mudou de node");
io_selection = lo_atual_selection;
}
}