Pegar pai de um nó JTreeModel

2 respostas
viniciusfaleiro

Galera… to fazer um model pra Jtree e to precisando de um método que voltasse o pai de um nó… como eu implementaria isso??

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package MyBeans;

import commun.BDConection;
import commun.MyLogger;
import commun.SqlConstants;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.swing.JOptionPane;

/**
 *
 * @author gs99860
 */
public class Classe_Membros {

    private int id;
    private String desc;
    private List<Membros> membros = new ArrayList<Membros>();

    @Override
    public String toString() {
        return desc;
    }

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * @return the desc
     */
    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public void removeMembro(Membros m) {
        try {
            Connection con = new BDConection().getCon();
            PreparedStatement stm = con.prepareStatement(new commun.SqlConstants().getSQL(SqlConstants.EXCLUIR_MEMBRO));

            stm.setInt(1, m.getId());

            stm.execute();

            membros.remove(m);

        } catch (Exception e) {
            String msg = "Erro ao excluir membro";

            e.printStackTrace();

            JOptionPane.showMessageDialog(null, msg);

            new MyLogger(msg, e);
        }

    }

    public void addMembro(Membros m) {
        //não tem um id ainda. Precisa inserir no banco
        if (m.getId() == 0) {
            Connection con = null;
            PreparedStatement stm = null;

            try {
                con = new BDConection().getCon();
                stm = con.prepareStatement(new commun.SqlConstants().getSQL(SqlConstants.INSERT_MEMBRO));

                new SqlConstants().beginTransaction(stm);

                stm.setString(1, m.getDesc());
                stm.setInt(2, m.getId_classe());

                stm.execute();

                stm = con.prepareStatement(new commun.SqlConstants().getSQL(SqlConstants.LAST_ID));

                ResultSet rs = stm.executeQuery();

                if (rs.next()) {
                    m.setId(rs.getInt("id"));
                } else {
                    throw new IllegalAccessError("Não foi possível retornar o ID");
                }

                new SqlConstants().commitTransaction(stm);

                membros.add(m);
               
            } catch (Exception e) {
                String msg = "Erro ao inserir membro";

                e.printStackTrace();

                JOptionPane.showMessageDialog(null, msg);

                new MyLogger(msg, e);

                try {
                    new SqlConstants().rollbackTransaction(stm);
                } catch (SQLException ex) {
                    msg = "Erro rollback";

                    ex.printStackTrace();

                    new MyLogger(msg, e);
                }
            }
            //caso já tenha um id, então apenas adiciona no model;    
        } else {
            membros.add(m);
        }


    }

    public List<Membros> getMembros() {
        return Collections.unmodifiableList(membros);
    }
}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package MyBeans;

/**
 *
 * @author gs99860
 */
public class Membros {

    private int id;
    private String desc;
    private int id_classe;

    @Override
    public String toString(){
        return desc;
    }

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * @return the desc
     */
    public String getDesc() {
        return desc;
    }

    /**
     * @param desc the desc to set
     */
    public void setDesc(String desc) {
        this.desc = desc;
    }

    /**
     * @return the id_classe
     */
    public int getId_classe() {
        return id_classe;
    }

    /**
     * @param id_classe the id_classe to set
     */
    public void setId_classe(int id_classe) {
        this.id_classe = id_classe;
    }
}

Agora o model

package TableModelsPersonalizados;

import MyBeans.*;
import java.util.ArrayList;
import java.util.List;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;

public class MyTreeModel implements TreeModel {
   
    private List<TreeModelListener> listeners = new ArrayList<TreeModelListener>();

    private List<Classe_Membros> classe_membros;

    public MyTreeModel(List<Classe_Membros> classe_membros) {
        this.classe_membros = classe_membros;
    }
    
    public Object getChild(Object parent, int index) {
        if (parent == classe_membros)
            return classe_membros.get(index); 

        if (parent instanceof Classe_Membros) 
        {
            return ((Classe_Membros) parent).getMembros().get(index);
        }

        throw new IllegalArgumentException("Invalid parent class"
                + parent.getClass().getSimpleName());
    }

    public int getChildCount(Object parent) {
        if (parent == classe_membros)
            return classe_membros.size();

        if (parent instanceof Classe_Membros) 
            return ((Classe_Membros) parent).getMembros().size();

        throw new IllegalArgumentException("Invalid parent class"
                + parent.getClass().getSimpleName());
    }

    public int getIndexOfChild(Object parent, Object child) {
        if (parent == classe_membros)
            return classe_membros.indexOf(child);
        if (parent instanceof Classe_Membros)
            return ((Classe_Membros) parent).getMembros().indexOf(child);

        return 0;
    }

    public Object getRoot() {
        return classe_membros;
    }

    public boolean isLeaf(Object node) {
        return node instanceof Membros;
    }

    public void valueForPathChanged(TreePath path, Object newValue) {

    }

    public void removeTreeModelListener(TreeModelListener l) {
        listeners.remove(l);
    }

    public void addTreeModelListener(TreeModelListener l) {
        listeners.add(l);
    }
}

2 Respostas

viniciusfaleiro

Resolvido…

public Classe_Membros getLeafsDad(Object m) {

        if (m instanceof Classe_Membros) {

            return (Classe_Membros) m;

        } else if (m instanceof Membros) {
            Membros t = (Membros) m;

            for (int i = 0; i < classe_membros.size(); i++) {
                if (classe_membros.get(i).getId() == t.getId_classe()) {
                    return classe_membros.get(i);
                }
            }
        }

        return null;

    }
criador

Cara, não cheguei a analisar seu código.
Mas abaixo um código que captura o pai de um nó.

tree.addTreeSelectionListener(new TreeSelectionListener() {public void valueChanged(TreeSelectionEvent e) {
final TreePath lo_path = e.getNewLeadSelectionPath();

Object[] path = ((DefaultMutableTreeNode) lo_path.getPathComponent(lo_path.getPathCount()-1)).getPath();

System.out.println(path[1].toString()); // Mostra o pai do node selecionado.
}});

Abraço!

Criado 23 de outubro de 2009
Ultima resposta 23 de out. de 2009
Respostas 2
Participantes 2