Evento JTree

5 respostas
L

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.

5 Respostas

lina

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.

Oi,

Alterar o node selecionado ou altera o conteúdo dentro do node selecionado?

Tchauzin!

L

Obrigado pela resposta.
Alterar o node selecionado.

lina

LeonardoU:
Obrigado pela resposta.
Alterar o node selecionado.

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!

L

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

lina
LeonardoU:
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:

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

Tchauzin!

Criado 10 de outubro de 2012
Ultima resposta 10 de out. de 2012
Respostas 5
Participantes 2