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
Desde java 7 esta disponible la interface ExecutorService que se extiende de Executor y nos proporciona los métodos nece[...]
Una clase JTree permite mostrar datos de una forma jerárquica y en realidad este objeto no contiene sus datos; es decir,[...]
JsFiddle es una herramienta que se puede utilizar de muchas maneras. Se puede utilizar como un editor en línea para crea[...]
Java Media Framwork ademas de permitir reproducir archivos multimedia, tambien permite trabajar con dispositivos de capt[...]
En este tutorial crearemos un sencillo juego de memoria en lenguaje java. Necesitamos IDE Netbeans 7.x Editor de imágene[...]
La Asamblea General de la Organización de las Naciones Unidas (ONU) en uno de esos extraños momentos de lucidez aprobó u[...]