[quote=Marlon Meneses]hei…
acho que é isso que você quer!
[code]
import java.awt.BorderLayout;
import java.awt.Component;
import java.text.DecimalFormat;
import java.util.LinkedList;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
public class Tables extends JFrame {
private JScrollPane scrollPane;
private final JTable table = new JTable();
private LabelTotal labelTotal;
public Tables() {
init();
}
final void init() {
List<Produto> l = new LinkedList<Produto>();
l.add(new Produto("Produto 1", 3.5, 650));
l.add(new Produto("Produto 2", 53.5, 450));
l.add(new Produto("Produto 3", 300.0, 120));
l.add(new Produto("Produto 4", 50.5, 55));
l.add(new Produto("Produto 5", 38.55, 80));
l.add(new Produto("Produto 6", 74.0, 60));
l.add(new Produto("Produto 7", 0.5, 20));
l.add(new Produto("Produto 8", 1.5, 500));
table.setModel(new TableProdutoModel(l));
labelTotal = new LabelTotal(((TableProdutoModel) table.getModel()).getTotal());
table.setDefaultRenderer(Double.class, new TableProdutoRender());
((TableProdutoModel) table.getModel()).addTableModelListener(new TableModelListener() {
@Override
public void tableChanged(TableModelEvent e) {
labelTotal.setText(((TableProdutoModel) table.getModel()).getTotal());
}
});
scrollPane = new JScrollPane(table);
this.setLayout(new BorderLayout());
this.add(scrollPane, BorderLayout.CENTER);
this.add(labelTotal, BorderLayout.PAGE_END);
this.pack();
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args) {
new Tables();
}
}
class Produto {
private String produto;
private Double valor;
private Integer qnt;
public Produto() {
}
public Produto(String produto, Double valor, Integer qnt) {
this.produto = produto;
this.valor = valor;
this.qnt = qnt;
}
public String getProduto() {
return produto;
}
public void setProduto(String produto) {
this.produto = produto;
}
public Integer getQnt() {
return qnt;
}
public void setQnt(Integer qnt) {
this.qnt = qnt;
}
public Double getValor() {
return valor;
}
public void setValor(Double valor) {
this.valor = valor;
}
}
class TableProdutoModel extends AbstractTableModel {
private List<Produto> listProduto;
private final String colunas[] = new String[]{"Produto", "Valor", "Quantidade", "Total"};
public TableProdutoModel() {
this.listProduto = new LinkedList<Produto>();
}
public TableProdutoModel(List<Produto> listProduto) {
this.listProduto = listProduto;
}
@Override
public int getRowCount() {
return this.listProduto.size();
}
@Override
public int getColumnCount() {
return this.colunas.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Produto p = listProduto.get(rowIndex);
switch (columnIndex) {
case 0:
return p.getProduto();
case 1:
return p.getValor();
case 2:
return p.getQnt();
case 3:
return p.getQnt() * p.getValor();
default:
return null;
}
}
@Override
public String getColumnName(int column) {
return colunas[column];
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
Produto p = listProduto.get(rowIndex);
switch (columnIndex) {
case 0:
p.setProduto(aValue.toString());
break;
case 1:
p.setValor(new Double(aValue.toString()));
break;
case 2:
p.setQnt(new Integer(aValue.toString()));
break;
}
fireTableRowsUpdated(rowIndex, rowIndex);
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return columnIndex < colunas.length - 1;
}
public Double getTotal() {
double total = 0;
for (Produto p : listProduto) {
total += p.getQnt() * p.getValor();
}
return total;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
switch (columnIndex) {
case 0:
return String.class;
case 1:
return Double.class;
case 2:
return Integer.class;
case 3:
return Double.class;
default:
return null;
}
}
}
class TableProdutoRender extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
JLabel c = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
c.setText(new DecimalFormat("¤###,##0.00").format(new Double(value.toString())));
c.setHorizontalAlignment(JLabel.RIGHT);
return c;
}
}
class LabelTotal extends JLabel {
public LabelTotal(Double valor) {
this.setText(valor);
this.setHorizontalAlignment(JLabel.RIGHT);
}
public void setText(Double valor) {
setText("Total: " + new DecimalFormat("¤###,##0.00").format(valor));
}
}[/code][/quote]
Cara, bem complexo seu código… :shock:
Mas no meu caso, os dados vem doo banco e preenche a table, q a quantidade é digitada pelo usuario, e não vem da classe peoduto…
Vou testar esse codigo pra mim entender melhor…Obrigadão!