2
I need to implement a Drag & Drop in one Jtree
of 3 levels so that by clicking on one node of the tree and dragging it to another, some operations are performed.
The scheme is basically:
Empreiteiro
|
Equipe
|
Empregado
Remembering that only us from the last level (Employee) can be dragged to us from the second level (Team), causing him to change teams. But I’m having trouble with the transferHandler
and to restrict that requirement I mentioned.
Creation of Jtree
, TreeNode
and Renderer
:
private JTree arvore;
private DefaultMutableTreeNode noRaiz = null;
private RendererJTree renderer = new RendererJTree();
Instantiation and TransferHandler
(Lack of 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 geraArvore()
:
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:
Example MCV:
import java.awt.Container;
import java.util.ArrayList;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.TransferHandler;
import javax.swing.tree.DefaultMutableTreeNode;
public class JTreeDnD extends JFrame {
private JTree arvore;
private DefaultMutableTreeNode noRaiz = null;
public static void main(String[] args) {
JTreeDnD frame = new JTreeDnD();
frame.setVisible(true);
}
public JTreeDnD() {
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);
}
}
Include in the question.
– Zulian