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
MyBatis es un framework de persistencia Java que se encarga de mapear sentencias SQL y procedimientos almacenados a part[...]
Si bien se puede hacer uso de archivos de imagen (jpg, png, bmp, etc) en las aplicaciones java, también este te permite[...]
En muchas ocasiones es necesaria la personalización de componentes java para que estos se adecuen a nuestros requerimien[...]
easyUML es una herramienta para crear diagramas UML para NetBeans de forma visual. Adecuado para el aprendizaje de este[...]
Una Prueba Unitaria, es una forma de comprobar que nuestro código, hace lo que se supone debe hacer; es decir, se asegur[...]
En este tutorial crearemos un lector de Feeds en Java/netbeans, pero antes debemosa saber que es un Feed, según Santa Wi[...]