Java = inserir dados no jtable

vou tentar ser bem claro e rápido…
tenho JTextField’s “Nome” e “Fone”… a pessoa escreve no JFrame os dados, e aperta em salvar…
no mesmo JFrame tem um JTable. quando a pessoa aperta em SALVAR, os dados dos JTextFields vão pro JTable…

table = new JTable();
      
      table.setModel(new DefaultTableModel(
            new Object[][]
            {
                  {null, null, null},
                  {null, null, null},   
                  {null, null, null},
                  {null, null, null},    
                     
            },
            
            new String[] {"ID", "NOME", "VALOR"}
      ));
      
      table.setBounds(40, 380, 600, 200);

private class SalvarAction implements ActionListener{
   
      @Override
      public void actionPerformed(ActionEvent event){
         if(salvar == event.getSource())
            
            DefaultTableModel model = (DefaultTableModel) jTablel.getModel();
            model.addRow(txtNome.getText(), txtFone.getText());
            JTable.validate();
      
      }
   }   

(sei que o código está horrível, galera, tô começando agora com essas paradas de interface gráfica, e tô meio perdido também com esse DefaultTableModel… agradeço qualquer ajuda valeuuu)

Não utilize DefaultTableModel, crie seu próprio TableModel para renderizar uma coleção de objetos.

Suponha que você tenha objetos do tipo Contato, definidos pela classe abaixo:

public class Contato {

    private String nome;
    private String telefone;

    public String getNome() {
        return nome;
    }

    public String getTelefone() {
        return telefone;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }
}

Veja como ficaria um exemplo bem simples de uma telinha de cadastro usando JTable:

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.UIManager;
import javax.swing.event.ListSelectionEvent;
import javax.swing.table.AbstractTableModel;

public class Exemplo extends JFrame {

    private class ContatoTableModel extends AbstractTableModel {

        private final String[] colunas = new String[] { "Nome", "Telefone" };

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

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

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

        @Override
        public Object getValueAt(int lin, int col) {
            if (lin > -1 && lin < contatos.size()) {
                Contato contato = contatos.get(lin);
                switch (col) {
                    case 0:
                        return contato.getNome();
                    case 1:
                        return contato.getTelefone();
                }
            }
            return null;
        }
    }

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            Exemplo tela = new Exemplo();
            tela.setDefaultCloseOperation(EXIT_ON_CLOSE);
            tela.setLocationRelativeTo(null);
            tela.setVisible(true);
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    private JTextField textFieldNome;
    private JTextField textFieldTelefone;
    private ContatoTableModel contatoTableModel;

    private List<Contato> contatos = new ArrayList<>();
    private Contato contatoAtual = new Contato();

    Exemplo() {
        super("Telinha de Exemplo");
        setMinimumSize(new Dimension(800, 600));
        Container container = getContentPane();
        container.add(criarPainelCampos(), BorderLayout.NORTH);
        container.add(criarPainelTabela(), BorderLayout.CENTER);
    }

    private void atualizarCampos() {
        String nome = contatoAtual.getNome();
        String telefone = contatoAtual.getTelefone();
        textFieldNome.setText(nome);
        textFieldTelefone.setText(telefone);
    }

    private Component criarPainelCampos() {
        textFieldNome = new JTextField();
        textFieldNome.setPreferredSize(new Dimension(200, 36));
        textFieldTelefone = new JTextField();
        textFieldTelefone.setPreferredSize(new Dimension(200, 36));

        JButton buttonNovo = new JButton("Novo");
        buttonNovo.setPreferredSize(new Dimension(100, 36));
        buttonNovo.addActionListener(event -> novo());

        JButton buttonSalvar = new JButton("Salvar");
        buttonSalvar.setPreferredSize(new Dimension(100, 36));
        buttonSalvar.addActionListener(event -> salvar());

        JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER));
        panel.add(buttonNovo);
        panel.add(new JLabel("Nome:"));
        panel.add(textFieldNome);
        panel.add(new JLabel("Telefone:"));
        panel.add(textFieldTelefone);
        panel.add(buttonSalvar);
        return panel;
    }

    private Component criarPainelTabela() {
        contatoTableModel = new ContatoTableModel();
        JTable table = new JTable(contatoTableModel);
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        table.getSelectionModel().addListSelectionListener(event -> selecionou(event));
        return new JScrollPane(table);
    }

    private void novo() {
        contatoAtual = new Contato();
        contatos.add(contatoAtual);
        atualizarCampos();
    }

    private void salvar() {
        String nome = textFieldNome.getText();
        String telefone = textFieldTelefone.getText();
        contatoAtual.setNome(nome);
        contatoAtual.setTelefone(telefone);
        contatoTableModel.fireTableDataChanged();
    }

    private void selecionou(ListSelectionEvent event) {
        if (event.getValueIsAdjusting()) {
            return;
        }
        int linha = event.getFirstIndex();
        contatoAtual = contatos.get(linha);
        atualizarCampos();
    }
}