JTree: Arrastar nós  XML
Índice dos Fóruns » Interface Gráfica
Autor Mensagem
vinicius-serpa
JavaChild

Membro desde: 10/01/2007 00:34:39
Mensagens: 117
Localização: Sorocaba
Offline

Eu preciso de uma ajuda para implementar "drag" numa estrutura JTree.

Eu criei uma JTree, com devidos nós e já consigo recuperar um nó selecionado, "collapsed" ou "expanded". Agora preciso implementar a ação de clicar e arrastar nos nós (semelhante à estrutura do windows), mudando assim a ordem dos nós.

Eu cheguei a dar um setDragEnabled(true) na JTree criada, agora ela reconhece a ação "Drag", mas não permite que eu arraste (mostra o icone de "proibido" do mouse). O que devo fazer a partir daí?

Vinicius Serpa
Engenheiro de Software
www.vinicius-serpa.com
[WWW]
vinicius-serpa
JavaChild

Membro desde: 10/01/2007 00:34:39
Mensagens: 117
Localização: Sorocaba
Offline

Legal Pessoal!!!
Alguém mais ??

Vinicius Serpa
Engenheiro de Software
www.vinicius-serpa.com
[WWW]
furutani
JWizard
[Avatar]

Membro desde: 11/10/2003 23:58:51
Mensagens: 2995
Localização: Iacri-SP e São Paulo-SP
Offline

Achei um exemplo no site mas tem alguns bugs. Uma delas é o cursor do mouse que indica que não é possivel soltar, mas mesmo assim funciona.

 Nome do arquivo TreeDragTest.java [Disk] Download
 Descrição Exemplo retirado daqui http://www.java2s.com/Code/Java/Swing-JFC/DnDdraganddropJTreecode.htm
 Tamanho 9 Kbytes
 Baixado:  307 vez(es)


Até mais,
Roberto Jundi Furutani


Sun Certified Business Component Developer 1.3
Sun Certified Web Component Developer
Sun Certified Java Programmer
SAP Certified Development Associate - ABAP with SAP NetWeaver 7.0

[WWW]
vinicius-serpa
JavaChild

Membro desde: 10/01/2007 00:34:39
Mensagens: 117
Localização: Sorocaba
Offline

Este site (java2s.com) acaba de entrar para os meus favoritos, eu ainda não o conhecia. Obrigado Furutani, vou realizar os testes aqui e assim que tiver novidades retorno ao post para comentá-las.

Vinicius Serpa
Engenheiro de Software
www.vinicius-serpa.com
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Oi chará!

Vamos lá:

O primeiro passo é você criar uma Tree que faça o scrolling automático, caso o usuário posicione o mouse em suas extremidades. Sem isso, seu usuário vai ficar frustrado caso tente arrastar o componente para um nó que não está visivel. A classe abaixo é uma "autoscrolling tree", com esse intuito:


O segundo passo é definir o seu DragSourceListener. Esse é o cara que vai aceitar o Drag and Drop quando o usuário começar a faze-lo. No meu caso, coloquei uma referência não só à árvore como também ao form que contém a árvore. Assim, posso acessar métodos do form que me sejam úteis.

Esse cara abaixo fará o editor realizar um "cut" em qualquer nó que esteja sendo movido. Quando o usuário soltar o nó, um paste será dado (isso será feita na outra classe, abaixo dela), fazendo assim a movimentação.

Note que eu não desejo cut para o nó raiz. Isso é uma particularidade do meu sistema, que você poderá remover para sua tree.



Agora, você deve implementar o seu DropTargetListener. Esse é o cara que responde quando o mouse é liberado em algum lugar. Como eu disse anteriormente, eu movo os nós dando um "cut" quando a movimentação inicia, e um paste, quando ela termina.



Finalmente, falta colocar tudo para trabalhar junto.
Na construção da sua tree faça:



As atributos ds e dt são, respectivamente, um TreeDragSource e um TreeDropTarget.
[WWW]
vinicius-serpa
JavaChild

Membro desde: 10/01/2007 00:34:39
Mensagens: 117
Localização: Sorocaba
Offline

Furutani: Estou estudando as classes e interface envolvidas para implementar esse recurso. Não é uma coisa muito fácil para um iniciante , mas já consegui reproduzir o exemplo da java2s.

ViniGodoy: Sua explicação sobre cada parte do código postado como exemplo me ajudou a ter uma boa visão macro do recurso de DnD, porém fiquei com dúvida quanto ao uso da classe JEditionPanel. É uma classe q vc mesmo criou?

Vinicius Serpa
Engenheiro de Software
www.vinicius-serpa.com
[WWW]
vinicius-serpa
JavaChild

Membro desde: 10/01/2007 00:34:39
Mensagens: 117
Localização: Sorocaba
Offline

furutani wrote:Achei um exemplo no site mas tem alguns bugs. Uma delas é o cursor do mouse que indica que não é possivel soltar, mas mesmo assim funciona.



Para solucionar o problema com o cursor:


Vinicius Serpa
Engenheiro de Software
www.vinicius-serpa.com
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Sim, o JEdition panel é o painel que contém a arvore.

Mas os recursos dele não são importantes. A única coisa relevante é que o método cut() "marca" qual foi o nó selecionado e o método paste move aquele nó para posição indicada.
[WWW]
supertex
Thread.start()

Membro desde: 09/05/2007 21:16:25
Mensagens: 28
Offline

Muito interessante o tópico, resolveu meu problema.
Mas alguem teria a informação sobre o problema do cursor?
Ainda nao conseguir fazer com que sumisse aquele sinal de proibido do cursor.
Obrigado
[MSN]
 
Índice dos Fóruns » Interface Gráfica
Ir para:   
Powered by JForum 2.1.8 © JForum Team