I need to implement a Drag & Drop in a% of 3 levels so that when you click on a tree node and drag it to another tree, some operations are performed.
The scheme is basically:
Empreiteiro
|
Equipe
|
Empregado
Remembering that only the last level knots (Employee) can be dragged to us from the second level (Team), causing them to switch teams. However I am having difficulty with Jtree
and in restricting this requirement that I mentioned.
Creation of transferHandler
, Jtree
and TreeNode
:
private JTree arvore;
private DefaultMutableTreeNode noRaiz = null;
private RendererJTree renderer = new RendererJTree();
Instantiation and Renderer
(Missing implementation):
noRaiz = new DefaultMutableTreeNode("");
arvore = new JTree(noRaiz);
geraArvore();
arvore.setCellRenderer(renderer);
arvore.setDragEnabled(true);
arvore.setTransferHandler(new TransferHandler(){
@Override
public boolean canImport(TransferSupport support) {
// TODO Auto-generated method stub
return super.canImport(support);
}
@Override
public boolean importData(TransferSupport support) {
return super.importData(support);
}
});
Method TransferHandler
:
private void geraArvore() {
noRaiz.removeAllChildren();
ArrayList<EmpreiteiroBO> iroBO = pessDao.consultaEmpreiteiro();
ArrayList<EquipeBO> equipeBO = pessDao.consultaEquipes();
ArrayList<EmpregadoBO> adoBO = pessDao.consultaEmpregado();
ArrayList<DefaultMutableTreeNode> noEmpreiteiro = new ArrayList<DefaultMutableTreeNode>();
ArrayList<DefaultMutableTreeNode> noEquipe = new ArrayList<DefaultMutableTreeNode>();
ArrayList<DefaultMutableTreeNode> noEmpregados = new ArrayList<DefaultMutableTreeNode>();
int auxIro = 0, auxEquipe = 0, auxAdo = 0;
do {
noEmpreiteiro.add(new DefaultMutableTreeNode(iroBO.get(auxIro).getCodigo() + "-" + iroBO.get(auxIro).getNome()));
noRaiz.add(noEmpreiteiro.get(auxIro));
do {
noEquipe.add(new DefaultMutableTreeNode(equipeBO.get(auxEquipe).getCodigo() + "-" + equipeBO.get(auxEquipe).getNome()));
if (equipeBO.get(auxEquipe).iroBO.getCodigo() == iroBO.get(auxIro).getCodigo()) {
noEmpreiteiro.get(auxIro).add(noEquipe.get(auxEquipe));
do {
noEmpregados.add(new DefaultMutableTreeNode(adoBO.get(auxAdo).getCodigo() + "-" + adoBO.get(auxAdo).getNome()));
if (adoBO.get(auxAdo).equipeBO.getCodigo() == equipeBO.get(auxEquipe).getCodigo()) {
noEquipe.get(auxEquipe).add(noEmpregados.get(auxAdo));
}
auxAdo++;
} while (auxAdo < adoBO.size());
auxAdo = 0;
}
auxEquipe++;
} while (auxEquipe < equipeBO.size());
auxEquipe = 0;
auxIro++;
} while (auxIro < iroBO.size());
DefaultTreeModel model = (DefaultTreeModel)arvore.getModel();
model.reload(noRaiz);
}
Tree:
MCVExample:
importjava.awt.Container;importjava.util.ArrayList;importjavax.swing.JFrame;importjavax.swing.JScrollPane;importjavax.swing.JTree;importjavax.swing.TransferHandler;importjavax.swing.tree.DefaultMutableTreeNode;publicclassJTreeDnDextendsJFrame{privateJTreearvore;privateDefaultMutableTreeNodenoRaiz=null;publicstaticvoidmain(String[]args){JTreeDnDframe=newJTreeDnD();frame.setVisible(true);}publicJTreeDnD(){setSize(400,300);setLocationRelativeTo(null);setTitle("JTree");
noRaiz = new DefaultMutableTreeNode("-");
arvore = new JTree(noRaiz);
geraArvore();
arvore.setDragEnabled(true);
arvore.setTransferHandler(new TransferHandler(){
// Aqui preciso realizar a operação de drag and drop
@Override
public boolean canImport(TransferSupport support) {
// TODO Auto-generated method stub
return super.canImport(support);
}
@Override
public boolean importData(TransferSupport support) {
return super.importData(support);
}
});
JScrollPane scrollArvore = new JScrollPane(arvore);
Container p = getContentPane();
p.add(scrollArvore);
}
private void geraArvore() {
DefaultMutableTreeNode noEmpreiteiro = new DefaultMutableTreeNode();
DefaultMutableTreeNode noEquipe = new DefaultMutableTreeNode();
DefaultMutableTreeNode noEmpregado = new DefaultMutableTreeNode();
noEmpreiteiro = new DefaultMutableTreeNode("Empreiteiro 1");
noRaiz.add(noEmpreiteiro);
noEquipe = new DefaultMutableTreeNode("Equipe 1");
noEmpreiteiro.add(noEquipe);
noEmpregado = new DefaultMutableTreeNode("Empregado 1");
noEquipe.add(noEmpregado);
noEquipe = new DefaultMutableTreeNode("Equipe 2");
noEmpreiteiro.add(noEquipe);
noEmpregado = new DefaultMutableTreeNode("Empregado 2");
noEquipe.add(noEmpregado);
noEmpregado = new DefaultMutableTreeNode("Empregado 3");
noEquipe.add(noEmpregado);
}
}