Amigos, pesquisei bastante aqui no fórum, porém não encontrei a solução do meu problema… o que tá acontecendo é o seguinte… tenho um jTable que retorna somente uma coluna, entretanto quero criar outra coluna com jcheckboxs em cada linha… tipo:
Categoria|coluna com o checkbox|
ativo | check
desligad | check
.
.
.
encontrei no fórum a opção de criar a coluna com o resultado do banco de dados… mas no meu caso quero colocar os checkbox para saber as categorias escolhidas e fazer o filtro no banco.
Desde já agradeço a todos,
Willian Baldez
Basta fazer seu TableModel retornar Boolean.class para o tipo da coluna.
Aí vc trata o que foi ou não marcado no método setValueAt.
Fala ViniGodoy, você pode me ajudar? vi alguns foruns que você e o Mark ensinaram a criar “meu prorpio” AbstractModel, bom pesquisando nesses foruns consegui criar o meu… mas não consegui fazer uma coisa, recuperar os dados para alteração e exclusão que seria o ID da linha, mas não quero que o ID apareça no jtable, vou postar o código para ver se vc pode me ajudar.
Classe onde fica meus getters e setters
package CamadaDeTeste;
/**
* @author willianbaldez
*/
public class TestePlano {
private String nome;
private double valor;
private int idCadPlano;
public int getIdCadPlano() {
return idCadPlano;
}
public void setIdCadPlano(int idCadPlano) {
this.idCadPlano = idCadPlano;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public double getValor() {
return valor;
}
public void setValor(double valor) {
this.valor = valor;
}
}
classe onde fica meus métodos - DAO
package CamadaDeTeste;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import regraDeNegocio.Conexoes_BD;
/**
*
* @author willianbaldez
*/
public class TestePLanoDAO {
private Connection con;
public List<TestePlano> lista = new ArrayList<TestePlano>();
private ResultSet rs;
public List<TestePlano> TestePLanoDAO() {
Conexoes_BD.conectaAcademia();
try {
rs = Conexoes_BD.stam.executeQuery("Select * from cadplano");
while (rs.next()) {
TestePlano contato = new TestePlano();
contato.setIdCadPlano(Integer.parseInt(rs.getString("IDCADPLANO")));
contato.setNome(rs.getString("NOME"));
contato.setValor(Double.parseDouble(rs.getString("VALOR")));
lista.add(contato);
}
} catch (SQLException e) {
System.out.println(e);
}
return lista;
}
}
Meu table Model
package CamadaDeTeste;
import java.util.List;
import javax.swing.table.AbstractTableModel;
public class TestePLanoTableModel extends AbstractTableModel {
private static final int COL_IDPLANO = 0;
private static final int COL_NOME = 1;
private static final int COL_VALOR = 2;
private List<TestePlano> lista;
public TestePLanoTableModel(List<TestePlano> lista) {
this.lista = lista;
}
public int getRowCount() {
return lista.size();
}
public int getColumnCount() {
return 3;
}
@Override
public String getColumnName(int column) {
if (column == COL_IDPLANO) return "#";
if (column == COL_NOME) return "Nome";
if (column == COL_VALOR) return "Valor";
return ""; //Nunca deve ocorrer
}
public Object getValueAt(int row, int column) {
TestePlano titulo = lista.get(row);
if (column == COL_NOME) return titulo.getNome();
else if (column == COL_VALOR) return titulo.getValor();
else if (column == COL_IDPLANO) return titulo.getIdCadPlano();
throw new IllegalArgumentException("Invalid column");
//return ""; //Nunca deve ocorrer
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
TestePlano titulo = lista.get(rowIndex);
if (columnIndex== COL_NOME) titulo.setNome(aValue.toString());
else if (columnIndex== COL_VALOR) titulo.setValor(Double.parseDouble(aValue.toString()));
else if (columnIndex== COL_IDPLANO) titulo.setIdCadPlano(Integer.parseInt(aValue.toString()));
}
@Override
public Class<?> getColumnClass(int columnIndex) {
if (columnIndex == COL_NOME) {
return String.class;
} else if (columnIndex == COL_VALOR) {
return Double.class;
} else if (columnIndex == COL_IDPLANO) {
return Integer.class;
} else {
return String.class;
}
}
public TestePlano get(int row) {
return lista.get(row);
}
}
Se vc me ajudar eu agradeço.
Tenho uma dúvida, a classe DAO que foi dita nos foruns, é onde fica meus métodos, é isso?
–
Willian Baldez
Com seu model próprio, fica ridiculamente simples. Veja:
TestePlanoTableModel model = (TestePlanoTableModel)seuTable.getModel();
TestePlano plano = model.get(seuTable.getSelectedRow()); //Obtém o TestPlano da linha selecionada
int id = plano.getIdCadPlano();
Note que não há nenhuma obrigatoriedade quanto ao campo id ser ou não visível. O model só indica para o table o que exibir e aonde, mas cada linha contém um TestePlano, e não um conjunto de objects não relacionados (como seria no Default).
Muito obrigado ViniGodoy, a sacada era int id = plano.getIdCadPlano();
não tinha feito isso… Valeu mesmo…Agora vou fazer o que você me sugeriu a respeito do jCheckbox.
vlw!