Boa tarde , então eu estou com a seguinte duvida eu queria saber se é possível salvar uma classe completa direto de jtable
não sei , se estou me expressando bem mais vamos la eu tenho um cadastro de receitas e na mesma tela um jtable pros
ingredientes, eu add um botão na lateral pra adicionar ou remover ingredientes do jtable e ao mesmo tempo ele remove ou add
na collection ingredientes da receita, bem eu estive pesquisando vendo sobre as tablemodel mais a maioria ja pede uma list de inicio,
sou iniciante mais gostaria de saber como fazer isso , com tablemodel pois com a default ja consigui mais quero ver se melhoro vlw e obrigado.
Bem galera não sei se fiz a pergunta intão vó mostra oque eu quero tentar fazer:
Tipo com DefaultTableModel eu faço:
Fuçao botao para criar uma nova linha:
Na jatable
dtmingredientes.addRow(new Object[]{null, null, null, null, null, null, null, null, null});
funcao que remove linhas
[code] private void remove_linhas() {
// TODO add your handling code here:
int linha = tblRegistros.getSelectedRow();
if (linha > -1) {
dtmingredientes.removeRow(linha);
} else {
if ((dtmingredientes.getRowCount() - 1) >= 0) {
dtmingredientes.removeRow(dtmingredientes.getRowCount() - 1);
} else {
JOptionPane.showMessageDialog(this, "Nao tem mais linhas.");
}
}
}[/code]
Dai eu tenho vários métodos.
[code]public double somar() {
double soma = 0;
for (int i = 0; i < tblRegistros.getRowCount(); i++) {
Double valor = Double.parseDouble(String.valueOf(Tratamento_String(i)));
soma += valor.doubleValue();
}
return soma;
}
public double cmv_porcao() {
double teste;
teste = somar() / Double.parseDouble(trat_campos(jtf_rend_quan.getText()));
return teste;
}
private String Tratamento_String(int i) {
String trat = String.valueOf(tblRegistros.getValueAt(i, 9));
trat = trat.replaceAll(",", “.”);
return trat;
}
private double cmv_evento() {
double total_evento;
Double n_partici = Double.parseDouble(trat_campos(jTextField7.getText()));
total_evento = cmv_porcao() * n_partici;
return total_evento;
}
private double venda_evento() {
double total_venda = 0;
total_venda = (Double.parseDouble(trat_campos(jTextField7.getText()))) * preco_venda();
return total_venda;
}
private double lucro_pretendido() {
double margem_lucro;
margem_lucro = cmv_porcao() * (Double.parseDouble(trat_campos(jtf_lucro_pretendido.getText()))) / 100;
return margem_lucro;
}
private double preco_venda() {
double preco_venda;
preco_venda = cmv_porcao() + lucro_pretendido();
return preco_venda;
}
private void quanti_bruta_table(){
double rendimento;
double quantidade_liquida;
double quantidade_bruta;
for (int i = 0; i < tblRegistros.getRowCount(); i++) {
rendimento=Double.parseDouble(String.valueOf(tblRegistros.getValueAt(i, 4)));
quantidade_liquida=Double.parseDouble(String.valueOf(tblRegistros.getValueAt(i, 2)));
quantidade_bruta=(quantidade_liquida*100)/rendimento;
Object oi;
DecimalFormat df = new DecimalFormat("0.00");
String pass = df.format(quantidade_bruta);
oi=pass;
tblRegistros.setValueAt(oi, i, 6);
}
}
private void quanti_compra_table(){
double rendimento;
double quantidade_liquida;
double numpart;
double quantidade_bruta;
for (int i = 0; i < tblRegistros.getRowCount(); i++) {
rendimento=Double.parseDouble(String.valueOf(tblRegistros.getValueAt(i, 4)));
quantidade_liquida=Double.parseDouble(String.valueOf(tblRegistros.getValueAt(i, 2)));
numpart= Double.parseDouble(jTextField7.getText());
quantidade_bruta=(quantidade_liquida*100)/rendimento*numpart;
Object oi;
DecimalFormat df = new DecimalFormat("0.00");
String pass = df.format(quantidade_bruta);
oi=pass;
tblRegistros.setValueAt(oi, i, 7);
}
}
private String trat_campos(String tes) {
String trat = tes.replace(‘R’, ’ ‘);
trat = trat.replace(’$’, ’ ‘);
trat = trat.replace(’:’, ’ ');
trat = trat.replaceAll(" ", “”);
return trat;
}
private double lucro_bruto_Evento() {
double lucro_bruto_evento;
lucro_bruto_evento = venda_evento() - cmv_evento();
return lucro_bruto_evento;
}[/code]
Intao agora eu usei tudo com defaultTablemodel eu queria criar um tablemodel próprio minha duvida é en questao os
cálculos que usam campo sen ser do jtable como faria e também minha primeira duvida
pois quando eu clico numa nova linha eu chamo um método que com os valores do jtable ele preenche meu objeto ingrediente e salva na colection e save usando o hibernate
tipo é ± assim
[code]Ficha f1= new Ficha();
Ingrediente in= new Ingrediente();
f1.setIngredientes(new ArrayList());
f1.getIngredientes().add(in);
hiber.insert(in);
[/code]
Galera já comecei com um exemplo que achei no fórum:
[code]public class IngredienteTableModel extends AbstractTableModel {
//Primeiro criamos constantes, para nossas colunas
private static final int COD = 0;
private static final int Descricao_Ingrediente = 1;
private static final int Qtdade_Liquida = 2;
private static final int Unidade = 3;
private static final int Rendimento = 4;
private static final int Embalagem = 5;
private static final int Qtdade_Bruta = 6;
private static final int Qtde_Compra = 7;
private static final int Preco_Unitario = 8;
private static final int Preco_Bruto = 9;
private List<Ingrediente> valores; //A lista de ingredientes que pretendemos exibir
public IngredienteTableModel() {
}
private Test_ficha test;
//Esse é um construtor, que recebe a nossa lista ingredientes
public IngredienteTableModel(Collection<Ingrediente> valores) {
this.valores = new ArrayList<Ingrediente>(valores);
}
public int getRowCount() {
//Quantas linhas tem sua tabela? Uma para cada item da lista.
return valores.size();
}
public int getColumnCount() {
//Quantas colunas tem a tabela? Na sua tabela, 5.
return 10;
}
public String getColumnName(int columnIndex) {
//Qual é o nome das nossas colunas? Isso aparecerá no cabeçalho
if (columnIndex == COD) {
return "Código";
}
if (columnIndex == Descricao_Ingrediente) {
return "Descrição";
}
if (columnIndex == Qtdade_Liquida) {
return "Qtdade Liquida";
}
if (columnIndex == Unidade) {
return "Unidade";
}
if (columnIndex == Rendimento) {
return "Rendimento";
}
if (columnIndex == Embalagem) {
return "Embalagem";
}
if (columnIndex == Qtdade_Bruta) {
return "Qtdade_Bruta";
}
if (columnIndex == Qtde_Compra) {
return "Qtdade_Compra";
}
if (columnIndex == Preco_Unitario) {
return "Preco Unitario";
}
if (columnIndex == Preco_Bruto) {
return "Preco Bruto";
}
throw new IllegalArgumentException("Invalid column:" + columnIndex);
}
public Object getValueAt(int row, int column) {
//Precisamos retornar o valor da coluna column e da linha row.
//O JTable chama esse método quando precisa desenhar uma célula. E só ele deve chama-lo.
//Você usará um método muito mais conveniente, chamado getProduto()
Ingrediente in = valores.get(row);
if (column == COD) {
return in.getCod_ingrediente();
}
if (column == Descricao_Ingrediente) {
return in.getDescricao_ingrediente(); //A descrição é só o nome mesmo?
}
if (column == Qtdade_Liquida) {
return in.getQuat_liquida();
}
if (column == Unidade) {
return in.getTipo_unidade();
}
if (column == Rendimento) {
return in.getRendimento();
}
if (column == Embalagem) {
return in.getEmbalagem();
}
if (column == Qtdade_Bruta) {
double qtb;
qtb=(in.getQuat_liquida()*100)/in.getRendimento();
in.setQuanti_bruta(qtb);
return in.getQuanti_bruta();
}
if (column == Qtde_Compra) {
return in.getQuanti_compra();
}
if (column == Preco_Unitario) {
return in.getPreco_uni();
}
if (column == Preco_Bruto) {
return in.getPreco_bru();
}
throw new IllegalArgumentException("Invalid column:" + column);
}
//Você deve implementar o setValueAt se sua tabela for editável.
//Nesse exemplo, vou deixar alterar só a quantidade.
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
try {
if (columnIndex == Rendimento) {
valores.get(rowIndex).setRendimento(Integer.parseInt(aValue.toString()));
}
} catch (Exception e) {
//Em caso de exceção, deixo o produto inalterado. Isso fará com que os valores antigos sejam desenhados.
//Pode ocorrer caso o usuário digite uma letra na quantidade, por exemplo.
}
}
public Class getColumnClass(int columnIndex) {
//Qual a classe das nossas colunas?
if (columnIndex == COD) {
return Long.class;
}
if (columnIndex == Descricao_Ingrediente) {
return String.class;
}
// if (columnIndex == Qtdade_Liquida) {
// return double.class
// }
if (columnIndex == Unidade) {
return String.class;
}
if (columnIndex == Rendimento) {
return int.class;
}
// if (columnIndex == Embalagem) {
// return double.class;
// }
// if (columnIndex == Qtdade_Bruta) {
// return double.class
// }
// if (columnIndex == Qtde_Compra) {
// return double.class
// }
// if (columnIndex == Preco_Unitario) {
// return double.class
// }
// if (columnIndex == Preco_Bruto) {
// return double.class
// }
//
//As demais são double
return Double.class;
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
//Indicamos se a célula da rowIndex e da columnIndex é editável. Somente a quantidade é editavel nesse exemplo
return columnIndex == Rendimento;
}
//Já que esse tableModel é de produtos, vamos fazer um get que retorne um produto inteiro.
//Isso elimina a necessidade de chamar o getValueAt() nas telas.
public Ingrediente get(int row) {
return valores.get(row);
}
// --- Já respondemos ao Swing o que ele queria saber. Agora é hora de adicionar métodos para nós mesmo. :)
//Esse método permite adicionar um produto na JTable
public void add(Ingrediente ingrediente) {
//Adicionamos o produto
valores.add(ingrediente);
//Avisamos a table, para que redesenhe a linha
fireTableRowsInserted(valores.size() - 1, valores.size() - 1);
}
public List<Ingrediente> getIngredientes() {
return Collections.unmodifiableList(valores);
}
}
[/code]
E agora meu problema como farei para mais campos editáveis , e como farei pra ele quando for salvar o ingrediente usar os dados do jtable???