Programación , Domótica y microcontroladores.

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

Comentarios en: "Defaultmutable Jtree con Jcheckbox" (7)

  1. Alberto dijo:

    muy bueno m ayudo bastante mil gracias…

  2. Gracias, andaba en busca de algo así.
    Saludos

  3. puedes ayudarme dando un ejemplo como puedo hacer mostrar en consola los estados de los checkb desde un jbutton

    • Pues es muy sencillo.
      Solo al momento que clickeas debes agregar estas linea de código.
      if(Jcheckbos.isselected())
      System.out.println(“esta seleccionado”);
      else
      System.out.println(“no esta seleccionado”);

      Así sería la lógica.

  4. Blessed dijo:

    Disculpa como puedo quitar los iconos q se ven.. gracias.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: