Evento JTree

Bom dia pessoal!

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=LeonardoU]Bom dia pessoal!

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?

Tchauzin!

Obrigado pela resposta.
Alterar o node selecionado.

[quote=LeonardoU]Obrigado pela resposta.
Alterar o node selecionado.[/quote]

Oi,

Então você quer dizer “renomear” o node, certo?

Geralmente eu uso o evento valueChanged para identificar qualquer mudança em relação ao conteúdo que o node carrega.

Até onde eu sei, o valueChanged é chamado ao clicar em um node especifico. Ou não?

Tchauzin!

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).

Oi,

Á 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;
	}
}

});[/code]

Tchauzin!