Drag & Drop in Jtree

Asked

Viewed 71 times

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:

Árvore

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

}

}
  • 1

    Include in the question.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.