jTable com jCheckBox

3 respostas
mizumoto

Bom dia,

Estou precisando colocar jCheckbox's  dentro de jTables e estou apanhando para descobrir como faço isso.
Antes de postar a pergunta aqui, resolvi dar uma pesquisada e no site da SUN eu encontrie o seguinte exemplo:

http://java.sun.com/docs/books/tutorial/uiswing/examples/components/SimpleTableDemoProject/src/components/SimpleTableDemo.java

O problema que eu estava tendo no meu programa se repete nesse exemplo ...
Na coluna onde a checkbox deveria aparecer (selecionada ou não), exibe apenas as mensagens true ou false.

Algúem pode me dar uma dica de como resolvo isso?

Obrigado,

DM

3 Respostas

davidtiagoconceicao

Crie um renderer:

http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#renderer

lina

Oi,

Você tem que dar o seguinte comando em sua tabela.:

getColumn(nomecoluna).setCellEditor(new DefaultCellEditor(io_cb_check));

Quem faz isso é o DefaultCellEditor(), olha a sua codificação.:

/**
     * Constructs a <code>DefaultCellEditor</code> object that uses a check box.
     *
     * @param checkBox  a <code>JCheckBox</code> object
     */
    public DefaultCellEditor(final JCheckBox checkBox) {
        editorComponent = checkBox;
        delegate = new EditorDelegate() {
            public void setValue(Object value) { 
            	boolean selected = false; 
		if (value instanceof Boolean) {
		    selected = ((Boolean)value).booleanValue();
		}
		else if (value instanceof String) {
		    selected = value.equals("true");
		}
		checkBox.setSelected(selected);
            }

	    public Object getCellEditorValue() {
		return Boolean.valueOf(checkBox.isSelected());
	    }
        };
	checkBox.addActionListener(delegate);
        checkBox.setRequestFocusEnabled(false);
    }

Para ser + especifica.:

if (value instanceof Boolean) {
	 selected = ((Boolean)value).booleanValue();
}
else if (value instanceof String) {
	selected = value.equals("true");
}

Tchauzin!

lina

Oi,

Falei besteira! =)
Realmente é o renderer rsrs....

olha só como eu fiz.:

/**
Class contendo o objeto de CheckBox para renderização na tabela.
*/
class CheckBoxCellRenderer extends DefaultTableCellRenderer {
	   
        private	JCheckBox 
        io_cb_check = new JCheckBox();
	  
        /**
        Sobre Carga de método que cria o a renderização de um CheckBox.
        */
         public
         Component	getTableCellRendererComponent
	(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
         {
	if (value instanceof Boolean) {
				
		//
		// Seta as opções do CheckBox que ira aparecer na coluna da tabela...
		//
		io_cb_check.setSelected(((Boolean)value).booleanValue());
		io_cb_check.setHorizontalAlignment(JLabel.CENTER);
		io_cb_check.setBackground(isSelected ? getSelectionBackground() : getBackground());
				
		return io_cb_check;
	}
			
	String
	str = (value == null) ? "" : value.toString();
			
	return super.getTableCellRendererComponent
	(
		table,
		str,
		isSelected,
		hasFocus,
		row,
		column
	);
        }
}

Então você chama ele assim.:

getColumn(nomecoluna).setCellRenderer(new CheckBoxCellRenderer());

Tchauzin!

Criado 20 de agosto de 2009
Ultima resposta 20 de ago. de 2009
Respostas 3
Participantes 3