Duvida sobre jtable

0 respostas
W

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

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

        }
    }

Dai eu tenho vários métodos.

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

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

Ficha f1= new Ficha();
Ingrediente in= new Ingrediente();
f1.setIngredientes(new ArrayList<Ingrediente>());
          
        f1.getIngredientes().add(in);
        hiber.insert(in);

Galera já comecei com um exemplo que achei no fórum:

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

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???

Criado 12 de fevereiro de 2013
Respostas 0
Participantes 1