Fala galera, possui uma tabela que um dos campos será checkbox, realizarei uma consulta e os dados apareceram e os campos que possui o checkbox, desmarcados, gostaria que quando a pessoa clica-se em determinando campo , bem onde possui o checkbox ele fica-se marcado, pois as linhas com o checkbox marcados, serão considerados depois que podera ser excluido…
Alguem tem ideia de como eu posso implementar isso?
Att
Ahhh e tambem em baixo da tabela possui um outro checkbox, que se caso ele for selecionado, todos os da tabela, serão tbm selecionados, para que o usuario nao prescise ficar um por um…
Obrigado
public class ListaRemoverCarregamentoTModel extends AbstractTableModel {
ArrayList lista = new ArrayList();
Controlar_RemoverCarregamento ctlremov;
public ListaRemoverCarregamentoTModel() {
ctlremov = new Controlar_RemoverCarregamento();
RemoverCarregamento carreg = new RemoverCarregamento();
for (int i = 0;i<1;i++) {
lista.add(carreg);
}
}
public ListaRemoverCarregamentoTModel(String id) {
ctlremov = new Controlar_RemoverCarregamento();
//lista = cadprod.carregarListaProdCoresCad(id);
CorDsv cor = new CorDsv();
for (int i=lista.size();i<6;i++) {
lista.add(cor);
}
}
public ListaRemoverCarregamentoTModel(ArrayList lista_) {
ArrayList ls = new ArrayList();
RemoverCarregamento carreg = new RemoverCarregamento();
if (!lista_.isEmpty()) {
for (int i = 0;i<lista_.size();i++) {
carreg = (RemoverCarregamento) lista_.get(i);
if (carreg.getStatus() != null) {
ls.add(lista_.get(i));
}
}
}
lista = ls;
carreg = new RemoverCarregamento();
for (int i=lista.size();i<6;i++) {
lista.add(carreg);
}
}
@Override
public String getColumnName(int column) {
String rs = "";
switch (column) {
case 0:
rs = "Plano Carga";
break;
case 1:
rs = "Pedido";
break;
case 2:
rs = "Cliente";
break;
case 3:
rs = "Item";
break;
case 4:
rs = "Qtd.Solic";
break;
case 5:
rs = "Qtd.Atendida";
break;
case 6:
rs = "Status";
break;
default:
rs = "";
}
return rs;
}
@Override
public Class getColumnClass(int columnIndex) {
Class rs;
switch (columnIndex) {
case 0:
rs = Integer.class;
break;
case 1:
rs = Integer.class;
break;
case 2:
rs = Integer.class;
break;
case 3:
rs = String.class;
break;
case 4:
rs = Float.class;
break;
case 5:
rs = Float.class;
break;
case 6:
rs = Boolean.class;
break;
default:
rs = null;
}
return rs;
}
@Override
public int getRowCount() {
return lista.size();
}
@Override
public int getColumnCount() {
return 7;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
RemoverCarregamento carreg = (RemoverCarregamento) lista.get(rowIndex);
Object rs= "";
switch (columnIndex) {
case 0:
rs = carreg.getPlano_carga();
break;
case 1:
rs = carreg.getNum_pedido();
break;
case 2:
rs = carreg.getCod_cliente();
break;
case 3:
rs = carreg.getCod_item();
break;
case 4:
rs = carreg.getQtd_solicitada();
break;
case 5:
rs = carreg.getQtd_atendida();
break;
case 6:
String temp = carreg.getStatus();
if (temp != null) {
if (temp.equals("A")) {
rs = "true";
} else if (temp.equals("I")) {
rs = "false";
}
} else {
rs = "true";
}
break;
default:
rs = "";
}
if (columnIndex == 6)
return Boolean.parseBoolean(rs.toString());
else
return rs;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
boolean[] canEdit = new boolean [] {false,false,false,false,false,false,true};
return canEdit [columnIndex];
}
public float getCodigo(int rowIndex) {
CorDsv cor = (CorDsv) lista.get(rowIndex);
return cor.getCod_cor();
}
public void limpaLista() {
int i = lista.size();
lista.clear();
fireTableRowsDeleted(0, i - 1);
}
public void remove(int indice) {
lista.remove(indice);
fireTableRowsDeleted(indice, indice);
}
}
Segue meu código…
Se sua coluna 6 é um Boolean.class, você deveria estar retornando Boolean.TRUE e Boolean.FALSE ao invés das String "True"e “False”. O mesmo vale para as colunas 4 e 5, onde você veria retornar floats e não Strings.
Para que os checkboxes venham marcados, os objetos cliente devem ser inicializados de modo que já tenham o status “A”.
Boa tarde, Vini…
Então como eu disse, eu queria que ao clicar se estive como true, ele alterace para false, assim desmarcando ele, quando eu realizar a pesquisa eles viram desmarcados, eu so vou marcar eles caso eu queira excluir esses registro do banco… e depois eu queria que ao clicar em um outro checkbox que eu fiz que ele seleciona-se todos os que tem dentro da tabela, para nao prescisar excluir um por um, entendeu?
Obrigado
Como fazer para que ao clicar, ele mude de selecionado para não selecionado e vice versa?
Assim como o Vini disse, voce precisa retornar um boolean go getValue invés de String para o campo que voce quer que seja um checkbox.
Bom dia galera, então eu modifiquei o meu getValue para retornar um Boolean… So que agora eu marco um o outro desmarca, sendo que nao e isso que eu quero. segue a imagem do que estou falando…
Eu consigo selecionar, mas dai a hora que eu seleciono um e tento selecionar o outros todos ficam selecionados, sendo que eu queria escolher bom esse eu quero selecionar, esse outro nao, esse sim, e assim por diante, ate implemente um TableCellEditor, antes que nao conseguia fazer com q a caixa fisca-se ‘riscada’, agora ela fica mas com esse pequena problema, de ficar ou todas selecionadas ou nenhuma selecionada… Gostaria de um help ai moçada…
Obrigado
Segue meu código, este é a minha TableModel…
public class ListaRemoverCarregamentoTModel extends AbstractTableModel {
ArrayList lista = new ArrayList();
Controlar_RemoverCarregamento ctlremov;
public ListaRemoverCarregamentoTModel() {
ctlremov = new Controlar_RemoverCarregamento();
RemoverCarregamento carreg = new RemoverCarregamento();
for (int i = 0;i<3;i++) {
lista.add(carreg);
}
}
public ListaRemoverCarregamentoTModel(String id) {
ctlremov = new Controlar_RemoverCarregamento();
//lista = cadprod.carregarListaProdCoresCad(id);
CorDsv cor = new CorDsv();
for (int i=lista.size();i<6;i++) {
lista.add(cor);
}
}
public ListaRemoverCarregamentoTModel(ArrayList lista_) {
ArrayList ls = new ArrayList();
RemoverCarregamento carreg = new RemoverCarregamento();
if (!lista_.isEmpty()) {
for (int i = 0;i<lista_.size();i++) {
carreg = (RemoverCarregamento) lista_.get(i);
if (carreg.getStatus() != null) {
ls.add(lista_.get(i));
}
}
}
lista = ls;
carreg = new RemoverCarregamento();
for (int i=lista.size();i<6;i++) {
lista.add(carreg);
}
}
@Override
public String getColumnName(int column) {
String rs = "";
switch (column) {
case 0:
rs = "Status";
break;
case 1:
rs = "Plano Carga";
break;
case 2:
rs = "Pedido";
break;
case 3:
rs = "Cliente";
break;
case 4:
rs = "Item";
break;
case 5:
rs = "Qtd.Solic";
break;
case 6:
rs = "Qtd.Atendida";
break;
default:
rs = "";
}
return rs;
}
@Override
public Class getColumnClass(int columnIndex) {
Class rs;
switch (columnIndex) {
case 0:
rs = Boolean.class;
break;
case 1:
rs = Integer.class;
break;
case 2:
rs = Integer.class;
break;
case 3:
rs = Integer.class;
break;
case 4:
rs = String.class;
break;
case 5:
rs = Float.class;
break;
case 6:
rs = Float.class;
break;
default:
rs = null;
}
return rs;
}
@Override
public int getRowCount() {
return lista.size();
}
@Override
public int getColumnCount() {
return 7;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
RemoverCarregamento carreg = (RemoverCarregamento) lista.get(rowIndex);
Object rs= "";
switch (columnIndex) {
case 0:
if(carreg.getStatus()!=null){
rs = carreg.getStatus();
} else {
carreg.setStatus(Boolean.FALSE);
rs = carreg.getStatus();
}
break;
case 1:
rs = carreg.getPlano_carga();
break;
case 2:
rs = carreg.getNum_pedido();
break;
case 3:
rs = carreg.getCod_cliente();
break;
case 4:
rs = carreg.getCod_item();
break;
case 5:
rs = carreg.getQtd_solicitada();
break;
case 6:
rs = carreg.getQtd_atendida();
break;
default:
rs = "";
}
if (columnIndex == 0)
return rs;
else
return rs;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
boolean[] canEdit = new boolean [] {true,false,false,false,false,false,false};
return canEdit [columnIndex];
}
public void limpaLista() {
int i = lista.size();
lista.clear();
fireTableRowsDeleted(0, i - 1);
}
public void remove(int indice) {
lista.remove(indice);
fireTableRowsDeleted(indice, indice);
}
public void setSelecionado(int rowIndex, Boolean value) {
RemoverCarregamento carreg= (RemoverCarregamento) this.lista.get(rowIndex);
carreg.setStatus(value);
}
}
Está e a minha CheckBoxCellEditor
public class CheckBoxCellEditor extends AbstractCellEditor implements TableCellEditor {
private JCheckBox checkbox;
private int rota;
private int tamanho;
private ListaRemoverCarregamentoTModel rtmodel;
@Override
public Object getCellEditorValue() {
return checkbox;
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
checkbox = new JCheckBox();
checkbox.setSelected(isSelected);
table.setRowHeight(30);
rota = row;
rtmodel=(ListaRemoverCarregamentoTModel) table.getModel();
tamanho = rtmodel.getRowCount();
return checkbox;
}
public void refreshTable(){
getCellEditorValue();
}
@Override
public boolean stopCellEditing() {
rtmodel.setSelecionado(rota,checkbox.getModel().isSelected());
return super.stopCellEditing();
}
}
Essa e a minha beans que eu guardo…
public class RemoverCarregamento {
private String cod_empresa;
private int plano_mestre;
private int plano_carga;
private int num_pedido;
private int cod_cliente;
private String cod_item;
private float qtd_solicitada;
private float qtd_atendida;
private Boolean status;
Não estou conseguindo fazer com q ele preencha um por vez, ou é tudo ou e nada…, alguem tem alguma solução?
Pra quem tiver a mesma dúvida, eu consegui resolver utilizando o seguinte metodo…
@Override
public void setValueAt(Object value,int rowIndex,int columnIndex) {
int col = 0;
if (columnIndex == col) {
RemoverCarregamento carreg = (RemoverCarregamento) lista.get(rowIndex);
carreg.setStatus((Boolean) value);
}
fireTableDataChanged();
}
Não há necessidade de criar CellEditor,TableCelleditor, para se obter um checkbox dentro de uma jtable, é somente fazer a estrutura de uma AbstractTableModel e aonde voce defini o tipo da sua coluna voce coloca Boolean, pois ele gera automatico…E quando a Jtable é modificada ela chama este metodo que eu postei acima, e no meu caso eu nao estava conseguindo só marcar somente um, eu clicava em um e todos era marcado, mas pelo fato que eu estava errado na minha lógica… Mas a base é essa galera…
Ate mais