Dúvida JTable

3 respostas
R

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);
    }
}

3 Respostas

ViniGodoy

Você deve criar algum tipo de campo para guardar o seu valor boolean.

Depois é só retornar esse campo como uma outra coluna qualquer, e definir seu tipo como Boolean.class.

R

Vini, não consegui fazer, eu criei uma nova coluna

case 7:   
                return Boolean.class;

e tambem criei um campo boolean no meu VO mas tambem não deu certo

case 7:   
                return produto.getSelecionado();
ViniGodoy

Não, não…

Você deve sobrescrever o método getColumnClass(). Nele vc retorna Boolean.class.
E aí no getValueAt e no setValueAt vc mexe com seu selecionado do VO.

Criado 28 de agosto de 2011
Ultima resposta 29 de ago. de 2011
Respostas 3
Participantes 2