Programación , Domótica y microcontroladores.

Archivo para mayo, 2012

Defaultmutable Jtree con Jcheckbox

A pedido de algunos amigos, se realizó este ejemplo básico pero muy útil. Seguro , te estarás preguntando en estos instantes ¿Para qué podría servir?Pues, podrías utilizarlo como un árbol de permisos para usuarios (En realidad, yo lo uso de esa forma , para un nuevo sistema para pymes que estoy desarrollando) ,etc.
Un poco de cómo funciona esto, explico a continuación.
Un Jtree puede ser fácilmente modificable utilizando sus propias funciones que a la vez son configurables tales como: setCellRenderer y setCellEditor.
setCellRenderer : Con esta función se puede modificar la forma del árbol , es decir, colocando nuevos elementos , tales como :Checkbox,Jtextfield,Jcombobox,icon,etc.
setCellEditor: Con esta función hacemos que el árbol reaccione a los eventos , y muestre valores que el usuario ha ingresado en ese instante. Sin este método un árbol no tendría vida.
Desarrollo:
Se han realizado tres clases llamadas: Render , Editor y Plantilla.
Render: Encargada de dibujar los componentes.
Editor: Encargada de dar le vida al árbol.
Plantilla: Contiene información del nodo.
Ejecución:
Para visualizar los resultados se arrastra un Jtree y se le agrega nodos. Veamos el código.
DefaultMutableTreeNode root=new DefaultMutableTreeNode(new Plantilla(“1”, “Permisos”, true, “Modulo inicial”));
DefaultMutableTreeNode hijo=new DefaultMutableTreeNode(new Plantilla(“2”, “Recursos Humanos”, false, ” Modulo de RRHH”));
hijo.add(new DefaultMutableTreeNode(new Plantilla(“3”, “Nuevo”, false, “”)));
hijo.add(new DefaultMutableTreeNode(new Plantilla(“4”, “Modificar”, false, “”)));
hijo.add(new DefaultMutableTreeNode(new Plantilla(“5”, “Eliminar”, false, “”)));
root.add(hijo);
modelo=new DefaultTreeModel(root);
jTree1.setModel(modelo);
jTree1.setEditable(true);
jTree1.setCellRenderer(new Render());
jTree1.setCellEditor(new Editor());

Imágenes:

Ahora , pongo las clases.

Render.java

<br>package jtreecheckbox;<br><br>import java.awt.Component;<br>import javax.swing.JCheckBox;<br>import javax.swing.JLabel;<br>import javax.swing.JPanel;<br>import javax.swing.JTree;<br>import javax.swing.UIManager;<br>import javax.swing.tree.DefaultMutableTreeNode;<br>import javax.swing.tree.TreeCellRenderer;<br><br>/**<br> *<br> * @author Wilfo<br> */<br>public class Render implements TreeCellRenderer {<br><br>    JCheckBox check;<br>    JLabel label;<br>    JPanel panel;<br><br>    //constructor por deecto<br>    public Render() {<br>        check = new JCheckBox();<br>        check.setBackground(UIManager.getColor("Tree.background"));<br>        check.setBorder(null);<br>        label = new JLabel();<br>        label.setFont(UIManager.getFont("Tree.font"));<br>        panel = new JPanel();<br>        panel.setOpaque(false);<br>        panel.add(check);<br>        panel.add(label);<br>    }<br><br>    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {<br>        //el objecto se transforma DefaultMutableTreeNode<br>        DefaultMutableTreeNode nodo=(DefaultMutableTreeNode)value;<br>        //accedo a los atributos de la clase plantilla<br>        //Esta parte es chevre por que puedes meter una clase en cada nodo del árbol<br>        //y cuando se selecciona se puede obtener todo lo referente a este nodo.<br>       //Observar la clase Plantilla y mira lo que contiene<br>        Plantilla clsPlantilla=(Plantilla)nodo.getUserObject();<br>        check.setSelected(clsPlantilla.getValor());<br>        label.setText(clsPlantilla.getNombre());<br>        label.setIcon(UIManager.getIcon("Tree.closedIcon"));<br>        return panel;<br>    }<br><br>}<br><br>

Editor.java

<br>package jtreecheckbox;<br><br>import java.awt.Component;<br>import java.awt.event.ActionEvent;<br>import java.awt.event.ActionListener;<br>import javax.swing.AbstractCellEditor;<br>import javax.swing.JCheckBox;<br>import javax.swing.JComponent;<br>import javax.swing.JLabel;<br>import javax.swing.JPanel;<br>import javax.swing.JTextField;<br>import javax.swing.JTree;<br>import javax.swing.UIManager;<br>import javax.swing.tree.DefaultMutableTreeNode;<br>import javax.swing.tree.TreeCellEditor;<br><br>/**<br> *<br> * @author Wilfo<br> */<br>public class Editor extends AbstractCellEditor<br>                      implements TreeCellEditor, ActionListener{<br><br>    JCheckBox check;<br>    JLabel label;<br>    JTextField textField;<br>    Plantilla clsPlantilla;<br>    JComponent editedComponent;<br>    JPanel panel;  <br><br>    public Editor(){<br>        check = new JCheckBox();<br>        check.addActionListener(this);<br>        check.setBackground(UIManager.getColor("Tree.background"));<br>        check.setBorder(null);<br>        label = new JLabel();<br>        label.setFont(UIManager.getFont("Tree.font"));<br>        textField = new JTextField();<br>        textField.addActionListener(this);<br>        textField.setBackground(UIManager.getColor("Tree.background"));<br>        textField.setBorder(null);<br>        panel = new JPanel();<br>        panel.setOpaque(false);<br>        panel.add(check);<br>        panel.add(label);<br>        panel.add(textField);<br>    }<br><br>    @Override<br>    public Object getCellEditorValue() {<br>        if(editedComponent == textField)<br>            clsPlantilla.setNombre(textField.getText());<br>        else<br>            clsPlantilla.setValor(check.isSelected());<br>        return clsPlantilla;<br>    }<br><br>    @Override<br>    public Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row) {<br>        DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;<br>        clsPlantilla = (Plantilla)node.getUserObject();<br>        check.setSelected(clsPlantilla.getValor());<br>        label.setIcon(UIManager.getIcon("Tree.openedIcon"));<br>        textField.setText(clsPlantilla.getNombre());<br>        return panel;<br>    }<br><br>    @Override<br>    public void actionPerformed(ActionEvent e) {<br>        editedComponent = (JComponent)e.getSource();<br>        super.stopCellEditing();<br>    }<br><br>}<br><br>
<br>package jtreecheckbox;<br><br>/**<br> *<br> * @author Wilfo<br> */<br>public class Plantilla {<br><br>  public  String id;<br>  public String nombre;<br>  public boolean valor;<br>  public String descripcion;<br><br>    public Plantilla(String id, String nombre, boolean valor, String descripcion) {<br>        this.id = id;<br>        this.nombre = nombre;<br>        this.valor = valor;<br>        this.descripcion = descripcion;<br>    }<br><br>    public String getDescripcion() {<br>        return descripcion;<br>    }<br><br>    public String getNombre() {<br>        return nombre;<br>    }<br><br>    public String getId() {<br>        return id;<br>    }<br><br>    public boolean getValor() {<br>        return valor;<br>    }<br><br>    public void setDescripcion(String descripcion) {<br>        this.descripcion = descripcion;<br>    }<br><br>    public void setId(String id) {<br>        this.id = id;<br>    }<br><br>    public void setNombre(String nombre) {<br>        this.nombre = nombre;<br>    }<br><br>    public void setValor(boolean valor) {<br>        this.valor = valor;<br>    }<br><br>    @Override<br>    public String toString(){<br>     return nombre;<br>    }<br><br>}<br><br>

Link de descarga aquí.

<a href=”http://www.4shared.com/rar/ndXm6QRz/JtreeCheckbox.html”>Descargar
</a>

Anuncios