2010-05-25 20 views
8

Prefacio: Soy horrible con Java, y peor con los componentes de Java Ui.¿Cómo hacer que la columna JTable contenga casillas de verificación?

He encontrado varios tutoriales diferentes sobre cómo agregar botones a las tablas, sin embargo, estoy luchando con la adición de casillas de verificación. Necesito tener una columna que dibuje un cuadro de texto marcado por defecto (creador de células, creo que maneja eso), luego al hacer clic en la casilla, desmarca el recuadro, vuelve a dibujar dicha casilla y dispara un evento en algún lugar que pueda rastrear.

Actualmente tengo un CellRenderer personalizada:

public class GraphButtonCellRenderer extends JCheckBox implements TableCellRenderer { 
public GraphButtonCellRenderer() { 
} 
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
    if(isSelected) 
     setSelected(true); 
    else 
     setSelected(false); 
    setMargin(new Insets(0, 16, 0, 0)); 
    setIconTextGap(0); 

    setBackground(new Color(255,255,255,0)); 
    return this; 
}} 

que en la actualidad las manijas dibujar el rectángulo de la señal, pero sólo las garrapatas y unticks la caja si se selecciona esa fila. Pero no sé cómo manejar los eventos. Realmente, lo que estoy preguntando es posiblemente un enlace a un buen tutorial sobre cómo agregar casillas limpiamente a una JTable. Cualquier ayuda se aprecia grandemente :)

Respuesta

23

No es necesario crear su propio procesador de tablas. Here's a simpler example. Basta con crear un modelo de tabla personalizada y para una columna dada devolver el booleana clase para:

public Class getColumnClass(int column) 

Si desea que la columna sea modificable, devuelven true para

public boolean isCellEditable(int row, int column) 

JTable se encarga de la prestación de tú.

Another example is here.

+0

+1 Buen punto; más simple puede ser suficiente. El tutorial describe varios renderizadores predeterminados para clases específicas. – trashgod

+0

Aceptado. Muchas gracias por los enlaces, estos son lo suficientemente simples como para seguir/integrar con mi proyecto actual – theraven

4

He aquí una sencilla bastante elaborada example utilizando un TableCellRenderer y TableCellEditor. Ver también, Concepts: Editors and Renderers.

Adición: @Jay El punto de Askren es bueno. El representador predeterminado para Boolean.class, como se describe en el tutorial, puede ser todo lo que necesita.

+0

Gracias. No me había encontrado con ese ejemplo en particular. Tantas cosas sucediendo ... Voy a darle una grieta – theraven

3

La solución más sencilla es utilizar el DefaultTableModel y utilizar objeto Boolean como valores.

+0

sí, eso es cierto @ Peter, Pero, ¿podríamos mejorar más agregando algún valor (ID) a esa casilla si queremos el VERDADERO? el valor se convierte en un valor de ID, y el valor FALSO sigue siendo FALSO? – gumuruh

5

Como dice Pedro, es fácil usando la clase DefaultTableModel prolongado, por ejemplo:

class NewTableModel extends DefaultTableModel{ 
     public Class<?> getColumnClass(int columnIndex) { 
      return getValueAt(0, columnIndex).getClass(); 
     } 
    } 
-5

en el conjunto de tipo de columna Swing Designer a Boolean

+1

esta solución asume que el OP está usando un constructor de UI de algún tipo –

Cuestiones relacionadas