Boa noite!!
Até agora eu estava utilizando DefaultTableModel para trabalhar com grid, porem andei lendo aqui no forum que isto não seria legal e então estou tentando trabalhar conforme orientações. hehehehe
Bem até agora estava indo muito bem, porem quando precisei incluir um chekbox na grid ai não foi.
Então pergunto. No código abaixo, como faço para que uma das culunas da grid seja um checkbox??
import java.awt.Color;
import java.awt.Component;
import javax.swing.JLabel;
import javax.swing.table.DefaultTableCellRenderer;
public class ProdutoCellRenderer extends DefaultTableCellRenderer {
public ProdutoCellRenderer() {
super();
}
public Component getTableCellRendererComponent(javax.swing.JTable table,
Object value, boolean isSelected, boolean hasFocus, int row, int column) {
JLabel label = (JLabel) super.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);
Color corFundoZebrado = new Color(240, 240, 240);
Color corFundoNormal = new Color(255, 255, 230);
label.setFont(new java.awt.Font("Tahoma", 0, 12));
if ((row % 2) == 0) {
label.setBackground(corFundoNormal);
} else {
label.setBackground(corFundoZebrado);
}
if (isSelected) {
label.setBackground(Color.BLACK);
}
if (column == 0) {
label.setHorizontalAlignment(LEFT);
} else if (column == 1) {
label.setHorizontalAlignment(RIGHT);
} else if (column == 2) {
label.setHorizontalAlignment(RIGHT);
} else if (column == 3) {
label.setHorizontalAlignment(LEFT);
} else if (column == 4) {
label.setHorizontalAlignment(LEFT);
} else if (column == 5) {
label.setHorizontalAlignment(LEFT);
} else if (column == 6) {
label.setHorizontalAlignment(RIGHT);
} else if (column == 7) {
label.setHorizontalAlignment(RIGHT);
}
return label;
}
}
import java.awt.FontMetrics;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.TableColumn;
public class ProdutoColumnModel extends DefaultTableColumnModel {
public ProdutoColumnModel(FontMetrics fm) {
addColumn(criaColuna(0, 300, fm, false, "Nome"));
addColumn(criaColuna(1, 100, fm, false, "Valor"));
addColumn(criaColuna(2, 80, fm, false, "Qtde. Estoque"));
addColumn(criaColuna(3, 100, fm, false, "GTIN"));
addColumn(criaColuna(4, 80, fm, false, "Código Interno"));
addColumn(criaColuna(5, 80, fm, false, "Descrição"));
addColumn(criaColuna(6, 80, fm, false, "Estoque Mínimo"));
addColumn(criaColuna(7, 80, fm, false, "Estoque Máximo"));
}
private TableColumn criaColuna(int columnIndex, int largura, FontMetrics fm, boolean resizable, String titulo) {
int larguraTitulo = fm.stringWidth(titulo + " ");
if (largura < larguraTitulo) {
largura = larguraTitulo;
}
TableColumn col = new TableColumn(columnIndex);
col.setCellRenderer(new ProdutoCellRenderer());
col.setHeaderRenderer(null);
col.setHeaderValue(titulo);
col.setPreferredWidth(largura);
if (!resizable) {
col.setMaxWidth(largura);
col.setMinWidth(largura);
}
col.setResizable(resizable);
return col;
}
}
import com.vo.ProdutoVO;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.List;
import javax.swing.table.AbstractTableModel;
public class ProdutoTableModel extends AbstractTableModel {
private List<ProdutoVO> listaProduto;
private NumberFormat formatter = new DecimalFormat("0.00");
public ProdutoTableModel(List<ProdutoVO> listaProduto) {
this.listaProduto = listaProduto;
}
public Object getValueAt(int rowIndex, int columnIndex) {
ProdutoVO produto = listaProduto.get(rowIndex);
switch (columnIndex) {
case 0:
return produto.getNome();
case 1:
return formatter.format(produto.getValorVenda());
case 2:
return produto.getQuantidadeEstoque();
case 3:
return produto.getGTIN();
case 4:
return produto.getCodigoInterno();
case 5:
return produto.getDescricao();
case 6:
return produto.getEstoqueMinimo();
case 7:
return produto.getEstoqueMaximo();
}
return null;
}
public int getRowCount() {
return listaProduto.size();
}
public int getColumnCount() {
return 8;
}
public ProdutoVO getValues(int rowIndex) {
return listaProduto.get(rowIndex);
}
}