Java - table

Boa noite Pessoal, estou tentando adicionar os campos em um JTable no outro JFrame ao clicar em adicionar no “ActionPerformed” porem sem resposta ao preencher tabela alguém pode da um help.

frmVendaRapida frmVr = new frmVendaRapida();
        formaPagamento = (DefaultTableModel)frmVr.tblFormaPagamento.getModel();
        formaPagamento.addRow(new Object[]{
        txtFormaPg.getText(),
        combTipoPg.getSelectedItem().toString(),
        combParcelasPg.getSelectedItem().toString(),
        txtValorPg.getText() 
        });
        
        frmFormaPagamento.this.dispose();
1 curtida

Você sempre está criando um novo objeto da classe frmVendaRapida, deveria ter só uma instância dessa classe.

Entendi, exemplo por gentileza?

Há várias alternativas.

Você pode criar uma factory que instancia suas telas uma única vez.

Pode tornar suas telas singletons.

Pode criar uma classe controladora responsável pela comunicação entre as telas.

Posta os fontes das suas telas, pra gente entender a relação e dependência entre elas.

Boa tarde apliquei o método Singleton no meu Jframe de venda:

public static frmVendaRapida getInstance(){
    
        if(frmVp==null){
            frmVp = new frmVendaRapida();
        }
        return frmVp;
    }

E instanciei ela na minha Jframe de forma de pagamento:

       private void btnConfirmarPgActionPerformed(java.awt.event.ActionEvent evt) {                                               
   
         frmVendaRapida frmVp = frmVendaRapida.getInstance();
         Venda venda = new Venda();   
         Formadepagamento pg = new Formadepagamento();
    
            tblPg = (TableModelJv)frmVp.tblFormaPagamento.getModel();
            pg.setDescricao(txtFormaPg.getText());
            venda.setFormadepagamento(pg);
            venda.setTipo(combTipoPg.getSelectedItem().toString());
            venda.setParcela(combParcelasPg.getSelectedItem().toString());
            if(!txtValorPg.getText().isEmpty()){
            venda.setValorpagamento(Double.parseDouble(txtValorPg.getText()));
            }
            
            tblPg.addRow(venda);
    
            this.dispose();

}

Porem mudei o código por que mudei de “DefaultTableModel” para um “AbstractTableModel” pois vi que que seri mais fácil de trabalhar porem mesmo assim não alimenta a minha tabela de uma forma para outro
class do AbstratTableModel:

public class TableModelJv extends AbstractTableModel {
    
    private final List<Venda> dados = new ArrayList<>();
    private final String[] colunas = {"Pagamento","Tipo","Parcelas","Valor"};

    @Override
    public String getColumnName(int column) {
        return colunas[column];
    }

    @Override
    public int getRowCount() {
        return dados.size();
    }

    @Override
    public int getColumnCount() {
        return colunas.length; 
    }

    @Override
    public Object getValueAt(int linha, int coluna) {
        
        switch(coluna){
            
            case 0:
                return dados.get(linha).getFormadepagamento().getDescricao();
            case 1:
                return dados.get(linha).getTipo();
            case 2:
                return dados.get(linha).getParcela();
            case 3:
                return dados.get(linha).getValorpagamento();    
        }
        
        return null;
    }
    
    public void addRow(Venda venda){
        this.dados.add(venda);
        this.fireTableDataChanged();
  
    }
    
}

Se puder me da um help de como alimentar uma tabela através de outro forme por incrível que parece creio que seja coisa boba mais estou bisonhando nisso

Pelo que entendi, seu método btnConfirmarPgActionPerformed está declarado dentro da classe Formadepagamento, certo?
Mas dentro desse método você está instanciando mais um Formadepagamento.

Dica: Você já tem uma tela sendo Singleton, eu faria todas elas, aí não acontece esse tipo de erro de instanciação desnecessária.
Outra coisa, o seu TableModelJv nem deveria ser público, eu faria ele ser uma inner-class da tela onde essa JTable se encontra.