Me llego la siguiente duda por facebook que me pareció interesante:
«Se quiere desarrollar una tabla en java que haga uso de JCheckBox pero que estos no estén en todas las filas « y pone un ejemplo:
+----------+--------+--------+ |texto0 |check |check | |texto1 |(vacio)|check | |texto2 |check |(vacio)| |texto3 |check |check | +----------+--------+--------+
Dejo la solución que encontré a continuación:
1. El proyecto esta conformado por:
Lo que hacemos es crear una clase (MyTableModel) que se extienda de AbstractTableModel para deshabilitar las celdas que no tenga un boolean y en cambio estén identificadas por un NULL.
A continuación creamos una nueva clase (CellRenderer) que se extiende de DefaultTableCellRenderer, su función, pintar las celdas boolean con JCheckBox y las que tengan NULL, no se pintara nada, las columnas afectadas son la 1,2 y 3
2. El código de las clases son:
MyTableModel.java
package org.bolivia.app; import javax.swing.table.AbstractTableModel; /** * @web https://www.jc-mouse.net/ * @author Mouse */ public class MyTableModel extends AbstractTableModel{ private String[] columnNames; private Object[][] data; /** Constructor de clase */ public MyTableModel( String[] columnNames, Object[][] data ) { this.columnNames = columnNames; this.data = data; } @Override public int getRowCount() { return data.length; } @Override public int getColumnCount() { return columnNames.length; } @Override public Object getValueAt(int rowIndex, int columnIndex) { return data[rowIndex][columnIndex]; } @Override public void setValueAt(Object value, int row, int column) { data[row][column] = value; } @Override public String getColumnName(int column) { return columnNames[column]; } @Override public Class getColumnClass(int column) { return getValueAt(0, column).getClass(); } @Override public boolean isCellEditable(int row, int column) { if( data[row][column]==null ) return false; return true; } }
CellRenderer.java
package org.bolivia.app; import java.awt.Color; import java.awt.Component; import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; /** * @web https://www.jc-mouse.net/ * @author Mouse */ public class CellRenderer extends DefaultTableCellRenderer { private JCheckBox check = new JCheckBox(); /** Constructor de clase*/ public CellRenderer(){} @Override public Component getTableCellRendererComponent ( JTable table, Object value, boolean selected, boolean focused, int row, int column ) { //color de celda seleccionada this.setBackground( (selected)? new Color( 50, 153 , 254):new Color(255,255,255) ); // if( column == 1 || column == 2 || column == 3 ) { Boolean bol = Boolean.valueOf(String.valueOf(value)); if( value == null ) { return null; } else // es un boolean { check = new JCheckBox(); check.setHorizontalAlignment( JLabel.CENTER ); check.setBackground( (selected)? new Color( 50, 153 , 254):new Color(255,255,255) ); check.setSelected( bol ); //valor de celda return check; } } return this; } }//--> fin clase
3. Para realizar las pruebas partimos de la siguiente matriz de datos:
Object[][] data = { {"César Noso",true,false,true}, {"Ana Busado de Hesa",false,null,true}, {"Lucila Tanga",true,null,null}, {"Ester Mosobicho ",null,true,null}, {"Mikoko Yanosuda",true,null,true}, {"Keko Jones",true,false,null}, {"Ana Mier de Cilla",true,false,true}, {"Ana Pulpito Salido",null,false,false}, {"Jack Hallate",true,false,false}, {"Evaristo Piernabierta Zas",false,null,false}, {"Pascual Conejo Enamorado",true,false,null}
Las columnas 1,2,3 hacen uso de valores booleanos y donde no queremos que se vea el checkbox, lo dejamos como NULL
Y tenemos como resultado:
podremos cambiar los valores de los checkbox TRUE|FALSE pero no de las celdas que estén marcadas con NULL
Proyecto realizado en Netbeans 7.3 AQUI
Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.
Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye
Enjoy! :)
Maria DB es un sistema de gestión de bases de datos derivado de MySQL con licencia GPL, pero con un rendimiento similar...
ASCII acrónimo inglés de American Standard Code for Information Interchange (Código Estándar Estadounidense para el Inte...
Cuando se realizan aplicaciones en java con base de datos y se llega a un punto donde es necesario realizar una consulta...
Segunda y ultima parte del post dedicado a la creación de un microservicio en lenguaje java utilizando el framework Spar...
Continuando con el estudio del meta lenguaje XML (Lenguaje de Marcado Extensible) bastante utilizado en el intercambio d...
En este post vemos un ejemplo de como convertir un archivo de imagen en una cadena de texto codificado en Base64 aprovec...
Los comentarios estan cerrados
Si trabajas con redes sociales (RRSS) a continuación te muestro tres herramintas gratuitas que te ayudaran a la hora de...
Por lo general se usan transacciones a nivel base de datos y posteriormente se llaman estos a través de procedimientos a...
En este post, aprenderemos como conectar Visual Basic 6 con SQL Server, abrir una tabla, leer su contenido y mostrar est...
Lo que veremos en este post es la configuración del driver para PHP de SQL Server que ha creado Microsoft el cual permit...
muy interesante amigo, descargando para probar. Éxitos
Hola, esta muy exelente el aporte, como se aplicaria entre Jframes ?
gracias
Excelente pagina y articulo, pero que servidor mas trucho =(
discula he estado checando el codigo de la aplicacion y despues de ejecutarlo me aparece un error como este me puedes deccir aq se debe esq soy nuevo en esto de la programacion en java
Exception in thread «AWT-EventQueue-0» java.lang.NoClassDefFoundError: org/jdom/input/JDOMParseException
at com.sun.syndication.io.SyndFeedInput.(SyndFeedInput.java:58)
at com.sun.syndication.io.SyndFeedInput.(SyndFeedInput.java:58)
at com.sun.syndication.io.SyndFeedInput.(SyndFeedInput.java:48)
at jcFeed.Iniciar_Feed(jcFeed.java:58)
at interfaz.jButton1ActionPerformed(interfaz.java:159)
at interfaz.access$000(interfaz.java:5)
Muy bueno para recuperar la imagen. Pero para guardarla en la base de datos? me da error
Hola me intereza combinar dos encabezado : ejemplo:
| Conceptos |
|concepto1 | concepto2 |
Ya tengo la idea solo que como puedo crear borde pero unicamente a ciertos lados de un jlabel??
Ya lo solucione.
lbl.setBorder(BorderFactory.createMatteBorder(0, 2, 2, 2, Color.BLUE));
Es posible cargar varias librerías por una sola vez?? Porque en este caso es uno en uno… Espero tu respuesta… Saludos
el archivo String XML donde lo ubico
Excelentes tutoriales eres el mejor
¿Hay alguna forma de abrir archivos «.xlsx» también?
Esta excelente el post.
Gracias por los aportes.