Galera, alguém poderia me dizer como eu faço para formatar as colunas de uma JTable. Por exemplo: tenho uma coluna que só pode receber números e outra que é do tipo data e por ai vai. E também gostaria de saber como eu faço para colocar um JComboBox na tabela.
Você vai ter que criar sua própria TableModel
nesse link tem um bom exemplo
http://www.guj.com.br/java/149034-duvidas-ao-fazer-uma-consulta#808003
assim você já trabalha com os tipos de dados corretos da sua classe e consegue “personalizar” do jeito que você quiser.
Dê uma pesquisada sobre AbstractTableModel.
dpainformatica, estou fazendo assim:
tá certo? pois num to conseguindo fazer o JComboBox aparecer. Nem postei o código que tava tudo errado, se alguem ai puder me ajudar
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.AbstractTableModel;
import sistemaproduto.Excecao.ClasseDeExcecao;
import sistemaproduto.modelo.dominio.Produto;
public class MeuModelo extends AbstractTableModel {
private ArrayList lista = new ArrayList();
private String[] colunas = {"Nome", "Quantidade",
"Unidade de venda", "Valor unitário", "Valor total", "Data da compra"};
public Produto getProdutoAt(int row) {
return (Produto) lista.get(row);
}
public Produto removeProdutoAt(int row) {
return (Produto) lista.remove(row);
}
public void addProduto(Produto w) {
lista.add(w);
fireTableDataChanged();
}
public void addProdutoList(List l) {
lista.addAll(l);
fireTableDataChanged();
}
public MeuModelo(List lista) {
lista.addAll(lista);
}
public MeuModelo() {
}
public int getRowCount() {
return lista.size();
}
@Override
public String getColumnName(int i) {
return colunas[i];
}
public int getColumnCount() {
return colunas.length;
}
public Object getValueAt(int linha, int coluna) {
Produto produto = (Produto) lista.get(linha);
switch (coluna) {
case 0:
return produto.getNome();
case 1:
return produto.getQuantidade();
case 2:
return produto.getUnidadeVenda();
case 3:
return produto.getValorVenda();
case 4:
return produto.getValorCompra();
case 5:
return produto.getDataCompra();
default:
return null;
}
}
@Override
public boolean isCellEditable(int linha, int coluna) {
switch (coluna) {
case 0: //nome
return true;
case 1: //quantidade
return true;
case 2: //unidade de venda
return true;
case 3: //valor unitário
return true;
case 4: //valor total
return true;
case 5: //data da compra
return true;
default:
return false;
}
}
@Override
public Class getColumnClass(int coluna) {
switch (coluna) {
case 0: //Nome
return String.class;
case 1: //Quantidade
return BigDecimal.class;
case 2: //unidade de venda
return String.class;
case 3: //valor unitário
return BigDecimal.class;
case 4: //valor total
return BigDecimal.class;
case 5: //data da compra
return Date.class;
default:
return null;
}
}
@Override
public void setValueAt(Object valor, int linha, int coluna) {
Produto produto = (Produto) lista.get(linha);
switch (coluna) {
case 0: //Nome
try {
produto.setNome(valor.toString());
} catch (ClasseDeExcecao ex) {
Logger.getLogger(ModeloTabela2.class.getName()).log(Level.SEVERE, null, ex);
}
break;
case 1: //quantidade
BigDecimal quantidade = new BigDecimal(valor.toString());
produto.setQuantidade(quantidade);
break;
case 2: //unidade de venda
try {
produto.setUnidadeVenda(valor.toString());
} catch (ClasseDeExcecao ex) {
Logger.getLogger(ModeloTabela2.class.getName()).log(Level.SEVERE, null, ex);
}
break;
case 3: //valor unitário
BigDecimal valorUnit = new BigDecimal(valor.toString());
produto.setValorVenda(valorUnit);
break;
case 4: //valor total
BigDecimal valortotal = new BigDecimal(valor.toString());
produto.setValorCompra(valortotal);
break;
case 5: //valor unitário
SimpleDateFormat dataFormatada = new SimpleDateFormat("dd/mm/yyyy");
Date data = null;
try {
data = new java.util.Date(dataFormatada.parse(valor.toString()).getTime());
try {
produto.setDataCompra(data);
} catch (ClasseDeExcecao ex) {
Logger.getLogger(ModeloTabela2.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (ParseException ex) {
Logger.getLogger(ModeloTabela2.class.getName()).log(Level.SEVERE, null, ex);
}
break;
}
}
}
Então a parte que “insere” a combobox em uma coluna não é feita no Model
você pode fazer assim :
private void inseriCombo(){
//cria uma nova combo
JComboBox cmbSuaCombo = new JComboBox();
//adiciona os items
cmbSuaCombo.addItem("Item 1");
cmbSuaCombo.addItem("Item 2");
cmbSuaCombo.addItem("Item 3");
cmbSuaCombo.addItem("Item 4");
//"pega" a coluna que você quer colocar a combo
TableColumn col1 = tblSuaTabela.getColumnModel().getColumn(1);
//aqui você diz que terá uma combo
col1.setCellEditor(new DefaultCellEditor(cmbSuaCombo));
}
acho que assim dá pra resolver