Hola como va?
Para poder asociar eventos al JTree tenes que implementar interfaces,
Código:
public class Arbol extends JTree implements TreeExpansionListener, TreeSelectionListener{
}
yo estuve usando el jtree hace como dos años mucho no me acuerdo!!!, fue un trabajo que tuve que continuar, alguien ya habia hecho cosas, aca te dejo el codigo!!!
Código:
mport java.util.Iterator;
import java.util.Observable;
import java.util.Observer;
import java.util.Vector;
import javax.swing.JTree;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;
import negocio.Componente;
import negocio.Sistema;
import negocio.Usuario;
/*
* Created on 27/09/2005
*/
/**
* Esta clase represnenta el Arbol que contiene todos los proyectos para poder recorrerlos.
* @author XXXXX Luciano
* @author XXXXX Diego
*/
public class Arbol extends JTree implements TreeExpansionListener,
TreeSelectionListener, Observer{
private Acciones sinAcceso;
private Vector accionesNivel;
private Sistema sis;
private PTarea pTarea;
private PTareaCompuesta pTareaCompuesta;
private PSinAcceso pSinAcceso;
/**
* Constructor de la clase.
* @param root: Raiz del Arbol
*/
public Arbol(TreeNode root) {
super(root);
this.addTreeExpansionListener(this);
this.addTreeSelectionListener(this);
accionesNivel = new Vector();
}
public void setSistema(Sistema sys){
this.sis = sys;
sis.addObserver(this);
}
public void setRender(){
this.setCellRenderer(new MiRender(sis.getPolitica()));
}
/**
* TODO Ver si lo podemos sacar.
*/
public void treeExpanded(TreeExpansionEvent event) {
}
public void treeCollapsed(TreeExpansionEvent event) {
}
public void valueChanged(TreeSelectionEvent e) {
MostrarSeleccion();
}
/**
* Este metodo muestra el panel correspondiente
* al tipo de componente seleccionado.
*/
private void MostrarSeleccion(){
DefaultMutableTreeNode nodo = (DefaultMutableTreeNode) this.getLastSelectedPathComponent();
if (nodo == null)
return;
Object informacion = nodo.getUserObject();
Acciones Accion=((Nodo)informacion).getAccion();
Componente comp=((Nodo)informacion).getComponente();
ocultar();
Usuario uActual = sis.getUsuario();
if (uActual.AccesoLectura(informacion.toString()))
Accion.mostrar(comp);
else
sinAcceso.mostrar(informacion);
}
/**
* @param Accion Representa el panel que se mostrara cuando se seleccione un nodo.
*/
public boolean setAccion(Acciones Accion){
Accion.ocultar();
accionesNivel.add(Accion);
return true;
}
public void setPanelTarea(PTarea t){
pTarea=t;
}
public PTarea getPanelTarea(){
return pTarea;
}
public void setPanelSinAcceso(PSinAcceso sa){
pSinAcceso=sa;
}
public PSinAcceso getPanelSinAcceso(){
return pSinAcceso;
}
public void setPanelTareaCompuesta(PTareaCompuesta tc){
pTareaCompuesta=tc;
}
public PTareaCompuesta getPanelTareaCompuesta(){
return pTareaCompuesta;
}
/**
* Esta funcion oculta todos los paneles.
*/
private void ocultar(){
Iterator Todos = accionesNivel.iterator();
sinAcceso.ocultar();
while (Todos.hasNext()) {
Acciones Accion = (Acciones) Todos.next();
if (Accion != null)
Accion.ocultar();
}
}
/**
* @return Retorna el valor del panel sinAcceso.
*/
public Acciones getSinAcceso() {
return sinAcceso;
}
/**
* Agregar una accion que sera lanzada cuando el arbol tenga acceso denegado a un determinado componente.
* @param sinAcceso Accion a guardar.
*/
public void setSinAcceso(Acciones sA) {
sinAcceso = sA;
}
/**
* Actualiza el arbol ante un cambio en el sistema.
*/
public void update(Observable o, Object arg) {
MostrarSeleccion();
}
public void mostrarRaiz(){
this.setSelectionInterval(0,0);
}
private void initGUI() {
try {
this.setPreferredSize(new java.awt.Dimension(115, 114));
} catch (Exception e) {
e.printStackTrace();
}
}
}
Espero te sirva, vuelvo a decir yo segui este codigo, y lo modifique!!!
Saludos!!