Drag & Drop on JTree

2

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

}

}
    
asked by anonymous 31.07.2017 / 15:29

0 answers