Java - checkbox dentro de un jtable

   
Vista:
Imágen de perfil de Adolfo

checkbox dentro de un jtable

Publicado por Adolfo (8 intervenciones) el 28/06/2016 23:23:03
Hola buenas tardes estoy creando una interfaz que tiene conexión a una BD pero necesito que tenga una columna que contenga checkbox para recuperar su información y así generar un reporte podrían ayudar a crear la columna de los checkbox por favor.
Este es mi código.

1
2
3
4
5
6
7
8
9
10
DefaultTableModel dfm=new DefaultTableModel();
resultados1 = this.resultados;
resultados1.setModel(dfm);
dfm.setColumnIdentifiers(new Object[]{"UDR","MUNICIPIO","NOMBRE COMPLETO","CURP","selleccionar"});
rstable=BD.getSql("select * from becarias where ID_MUN='"+str+"'");
 
while(rstable.next()){
	dfm.addRow(new Object[]{rstable.getString("LOC_SEDE"),rstable.getString("MUNICIPIO"),rstable.getString("Nombre_Completo"),rstable.getString("CURP") });
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

checkbox dentro de un jtable

Publicado por Esmeralda (10 intervenciones) el 03/07/2016 21:51:10
Este codigo te puede ayudar
Lo primero que debe hacerse, es crear una nueva clase que se extienda de DefaultCellEditor e implemente TableCellRenderer, esto para indicarle al JTable que tipo de componente debe utilizar al momento de introducir la información.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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;
/**
 * @web http://www.jc-mouse.net
 * @author Mouse
 */
public class Celda_CheckBox extends DefaultCellEditor implements TableCellRenderer  {
 
    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, boolean isSelected, int row, int column) {
        //Color de fondo en modo edicion
        ( (JCheckBox) component).setBackground( new Color(200,200,0) );
        //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, boolean isSelected, boolean hasFocus, int row, int column) {
         if (value == null)
            return null;
         return ( (JCheckBox) component );
    }
 
}
Para que el JTable pinte el componente, creamos otra clase, esta vez que se extienda de JCheckBox, el componente que queremos pintar e implemente TableCellRenderer, la clase es la siguiente.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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;
/**
 * @web http://www.jc-mouse.net
 * @author Mouse
 */
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, boolean isSelected, boolean hasFocus, int row, int column) {
      //Color de fondo de la celda
      ( (JCheckBox) component).setBackground( new Color(0,200,0) );
      //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_CheckBox) 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 edición, de la siguiente manera:
jTable1.getColumnModel().getColumn( 0 ).setCellEditor( new Celda_CheckBox() );
y también 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 algunos datos:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public interfaz() {
        initComponents();
        this.setTitle("jTable con jCheckBox - [ http://www.jc-mouse.net/ ]");
 
        //se crea un TableModel con algunos datos y se asigna al JTable
        DefaultTableModel TableModel = new DefaultTableModel();
        TableModel.setDataVector(new Object[][] {
        { false, "Juan Perez", "12", "Hombre" },
        { false, "Homero J. Simpsons", "40", "Hombre" },
        { true, "Ned Flanders", "35", "Hombre" },
        { true, "Asuka Langley", "15", "Si gracias" },
        { false, "Rei Ayanami", "16", "Mujer" },
        { true, "shinji ikari", "15", "No se sabe" } }, 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_CheckBox() );
        //para pintar la columna con el CheckBox en la tabla, en este caso, la primera columna
        jTable1.getColumnModel().getColumn( 0 ).setCellRenderer(new Render_CheckBox());
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Adolfo

checkbox dentro de un jtable

Publicado por Adolfo (8 intervenciones) el 04/07/2016 16:19:04
muchas gracias amigo pero ya resolví el problema aun así gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Xavi

checkbox dentro de un jtable

Publicado por Xavi (2 intervenciones) el 04/07/2016 18:22:26
Hola Adolfo, como lo resolviste?? nos lo puedes compartir?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Adolfo

checkbox dentro de un jtable

Publicado por Adolfo (8 intervenciones) el 04/07/2016 21:30:55
claro.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
BD.conectar();
ResultSet  rs;
 
 
As=(String) Años.getSelectedItem();
rs=BD.getSql("select  semestre_todo.* , becarias.* from semestre_todo cross join becarias where "
		+ "semestre_todo.ID=becarias.ID AND semestre_todo.Ano='"+As+"'");
 
DefaultTableModel dfm=new DefaultTableModel();
resultados1 = this.resultados;
resultados1.setModel(dfm);
dfm.setColumnIdentifiers(new Object[]{"Apelldio Paterno","Apellido Materno","NOMBRE COMPLETO","Total","CURP","Imprimir"});
 
while(rs.next()){
	dfm.addRow(new Object[]{
		rs.getString("APELLIDO_PATERNO"),
		rs.getString("APELLIDO_MATERNO"),
		rs.getString("Nombre_Completo"),
		rs.getString("Ing_Men"),
		rs.getString("CURP")
 
	});
	//Tcol es de tipo TableColumn;
 
	Tcol=resultados1.getColumnModel().getColumn(5);//el numero dentro de getColum se refiere a la posiciónen la que se encuentra tu columna
 
	Tcol.setCellEditor(resultados1.getDefaultEditor(Boolean.class));
	Tcol.setCellRenderer(resultados1.getDefaultRenderer(Boolean.class));
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar