[Resolvido] Mostrar JCheckBox em JTable

5 respostas
S

Olá a todos,

estou com um pequeno probleminha usando JTable. Tenho apenas 2 colunas nessa JTable, das quais a primeira é um CellEditor com uma JCheckBox dentro. O problema é que aparece apenas o texto na célula, e eu precisaria que aparecesse a checkbox em si, o gráfico dela.

Alguém tem idéia do que eu devo mudar para que apareça o gráfico da checkbox ao invés do valor?

[]'s

5 Respostas

V

Você não precisa de um CellEditor com um checkbox dentro para fazer um CheckBox no JTable. Essa é uma forma extremamente complicada de fazer algo que o JTable já faz de maneira trivial.

A forma mais simples é fazer seu TableModel retornar Boolean.class para a coluna em questão.

Se você não sabe o que é um TableModel, dê uma lida nos links da minha assinatura.

S

ViniGodoy:
Você não precisa de um CellEditor com um checkbox dentro para fazer um CheckBox no JTable. Essa é uma forma extremamente complicada de fazer algo que o JTable já faz de maneira trivial.

A forma mais simples é fazer seu TableModel retornar Boolean.class para a coluna em questão.

Se você não sabe o que é um TableModel, dê uma lida nos links da minha assinatura.

Estou usando DefaultTableModel (que, por sinal, vi falarem aqui no fórum que não é exatamente a melhor coisa), só que não tenho muito a opção de mudar isso. Como fazer para que o model retorne Boolean.class nessa coluna?

V

Por que você não tem essa opção? Usar o DefaultTableModel dá muito trabalho, deixa o código mal estruturado, fere o modelo MVC, usa mais do que o dobro de memória e consome performance em processamento inútil.

Mas enfim, você pode criar um filho do DefaultTableModel.

DefaultTableModel model = new DefaultTableModel() { @Override public Class<?> getColumnClass(int column) { if (column == 0) //Vamos deixar a primeira coluna com o checkbox return Boolean.class; return super.getColumnClass(column); } }

S

Obrigada Vini!

Não posso mudar por questões de decisão, não tenho poder pra isso hehe.
Mas caso eu possa no futuro, usarei o ObjectTableModel da sua assinatura. :slight_smile:

Valeu a ajuda!

Agora vou ter q ver como solucionar a questão do checkbox ficar dançando na coluna… hahahah

A

ViniGodoy:
Você não precisa de um CellEditor com um checkbox dentro para fazer um CheckBox no JTable. Essa é uma forma extremamente complicada de fazer algo que o JTable já faz de maneira trivial.

A forma mais simples é fazer seu TableModel retornar Boolean.class para a coluna em questão.

Se você não sabe o que é um TableModel, dê uma lida nos links da minha assinatura.

Vinni, pode me dar uma ajuda?

estou com o mesmo problema… coloco mais não aparece a check box na tabela…

public Class<?> getColumnClass(int coluna) {
		switch (coluna) {
		case 0:
			return Object.class; 
		case 1:
			return Object.class; 
		case 2:
			return Boolean.class; 
		default:
			return Object.class; 
		}
	}

e para pegar o valor…

public Object getValueAt(int linha, int coluna) {
		PermissoesGET c = permissoes.get(linha);

		switch (coluna) {
		case 0:
			return c.getId(); 
		case 1:
			return c.getDescricao(); 
		case 2:
			return c.isAcesso();
		default:
			return null; 
		}
	}

e para setar o valor…

public void setValueAt(Object valor, int linha, int coluna) {
		PermissoesGET c = permissoes.get(linha);

		switch (coluna) {
		case 0:
			c.setId((Integer)valor); 
			break;
		case 1:
			c.setDescricao(valor.toString()); 
			break;
		case 2:
			c.setAcesso(new Boolean((Boolean) valor)); 
			break;
		}
		fireTableDataChanged();
	}


-------------



DAO com conexão para setar o valor..

	public static PermissoesGET getUsuarios(ResultSet rs) throws SQLException {
		PermissoesGET c = new PermissoesGET();
		try {
			c.setId(rs.getInt("id"));
			c.setDescricao(rs.getString("descricao"));
			c.setAcesso(false);
		} catch (SQLException e) {
			throw new SQLException("Não foi possivel setar os valores para a lista!",
					e);
		}
		return c;
	}

pode me ajudar??

Criado 18 de agosto de 2010
Ultima resposta 3 de mai. de 2012
Respostas 5
Participantes 3