Si deseas descargar el proyecto netbeans copia este link y pegalo en tu navegado
r, proyecto realizado en netbeans 7.4
clic en saltar publicidad, y descarga el proyecto de poner JCheckBox dentro de u
n JTable en java netbeans
http://sh.st/wGM7i
-----------------------------------------------------------------------------------------------------------------------------Para colocar un JCheckBox dentro una celda de un JTable debemos sobre escribir a
lgunas clases para que el componente
pueda ser pintado en el JTable, si se desea colocar cualquier otro componente, e
l procedimiento es similar,
teniendo cuidado claro, en los mtodos propios de cada componente swing.
Lo primero que debe hacerse, es crear una nueva clase que se extienda de Default
CellEditor e implemente
TableCellRenderer, esto para indicarle al JTable que tipo de componente debe uti
lizar al momento de introducir la informacin.
package JheysonMattatablecheckBox;
import java.awt.Color;
import java.awt.Component;
import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;
/**
* @www.facebook.com/groups/ProgramacionEnGeneral/
* @author Jheyson Matta
*/
public class Celda_CheckBox extends DefaultCellEditor implements TableCellRender
er {
private JComponent component = new JCheckBox();
private boolean value = false; // valor de la celda
/** Constructor de clase */
public Celda_CheckBox() {
super( new JCheckBox() );
}
/** retorna valor de celda */
@Override
public Object getCellEditorValue() {
return ((JCheckBox)component).isSelected();
}
/** Segun el valor de la celda selecciona/deseleciona el JCheckBox */
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boo
lean isSelected, int row, int column) {
//Color de fondo en modo edicion
( (JCheckBox) component).setBackground( new Color(234,176,40) );
//obtiene valor de celda y coloca en el JCheckBox
boolean b = ((Boolean) value).booleanValue();
( (JCheckBox) component).setSelected( b );
return ( (JCheckBox) component);
}
/** cuando termina la manipulacion de la celda */
@Override
public boolean stopCellEditing() {
value = ((Boolean)getCellEditorValue()).booleanValue() ;
((JCheckBox)component).setSelected( value );
return super.stopCellEditing();
}
/** retorna componente */
public Component getTableCellRendererComponent(JTable table, Object value, b
oolean isSelected, boolean hasFocus, int row, int column) {
if (value == null)
return null;
return ( (JCheckBox) component );
}
}
------------------------------------------------------------------------------------------------------------------------------
package JheysonMattatablecheckBox;
/**
* @www.facebook.com/groups/ProgramacionEnGeneral/
* @author Jheyson Matta
*/
public class Main {
public static void main(String[] args) {
new interfaz().setVisible(true);
}
}
-----------------------------------------------------------------------------------------------------------------------------Para que el JTable pinte el componente, creamos otra clase, esta vez que se exti
enda de JCheckBox,
el componente que queremos pintar e implemente TableCellRenderer, la clase es la
siguiente.
package JheysonMattatablecheckBox;
import java.awt.Color;
import java.awt.Component;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;
/**
* @www.facebook.com/groups/ProgramacionEnGeneral/
* @author Jheyson Matta
*/
public class Render_CheckBox extends JCheckBox implements TableCellRenderer {
private JComponent component = new JCheckBox();
/** Constructor de clase */
public Render_CheckBox() {
setOpaque(true);
}
public Component getTableCellRendererComponent(JTable table, Object value, boo
lean isSelected, boolean hasFocus, int row, int column) {
//Color de fondo de la celda
( (JCheckBox) component).setBackground( new Color(146,200,80) );
//obtiene valor boolean y coloca valor en el JCheckBox
boolean b = ((Boolean) value).booleanValue();
( (JCheckBox) component).setSelected( b );
return ( (JCheckBox) component);
}
}
-----------------------------------------------------------------------------------------------------------------------------Resumiendo, para pintar un componente swing dentro una celda de una tabla JTable
,
debemos crear dos clases una para manipular los valores de la celda (Celda_Check
Box)
con el propio componente y otra para pintar el componente.
Para implementar estas clases en el JTable, debemos indicarle que columna es la
que
contendr el componente swing en el modo edicin, de la siguiente manera:
jTable1.getColumnModel().getColumn( 0 ).setCellEditor( new Celda_CheckBox() );
y tambin indicar que columna pintara el JCheckBox en todo momento.
jTable1.getColumnModel().getColumn( 0 ).setCellRenderer(new Render_CheckBox());
Un ejemplo completo que se inicia en el constructor de una clase JFrame llamado
interfaz
el cual tiene un JTable, ademas se hace uso de un TableModel para colocar alguno
s datos:
package JheysonMattatablecheckBox;
import javax.swing.table.DefaultTableModel;
/**
* @www.facebook.com/groups/ProgramacionEnGeneral/
* @author Jheyson Matta
*/
public class interfaz extends javax.swing.JFrame {
/** Creates new form interfaz */
public interfaz() {
initComponents();
this.setTitle("Jheyson Matta - jTable con jCheckBox ");
//se crea un TableModel con algunos datos y se asigna al JTable
DefaultTableModel TableModel = new DefaultTableModel();
TableModel.setDataVector(new Object[][] {
{ true, "Jheyson Matta", "19", "Hombre" },
{ false, "Alexis Cahua", "19", "Hombre" },
{ false, "Juan Oncevalle", "49", "Hombre" },
{ true, "Brenda Silvera", "19", "Mujer" },
{ false, "Gabriel Ruiz", "15", "Hombre" },
{ false, "Jos Hinostroza", "47", "Hombre" },
{ false, "Ruth Neyra", "19", "Mujer" } }, new Object[] {
"CheckBox", "Nombre", "Edad", "Sexo" });
jTable1.setModel(TableModel);
//Se crea el JCheckBox en la columna indicada en getColumn, en este caso
, la primera columna
jTable1.getColumnModel().getColumn( 0 ).setCellEditor( new Celda_CheckBo
x() );
//para pintar la columna con el CheckBox en la tabla, en este caso, la p
rimera columna
jTable1.getColumnModel().getColumn( 0 ).setCellRenderer(new Render_Check
Box());
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null},
{null, null, null, null},
{null, null, null, null},
{null, null, null, null}
},
new String [] {
"Title 1", "Title 2", "Title 3", "Title 4"
}
));
jScrollPane1.setViewportView(jTable1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentP
ane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING
)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SI
ZE, 559, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX
_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING
)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SI
ZE, 135, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX
_VALUE))
);
pack();
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new interfaz().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
// End of variables declaration
}