Java = inserir dados no jtable

1 resposta
cscalea

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)

1 Resposta

staroski

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();
    }
}
Criado 2 de dezembro de 2018
Ultima resposta 3 de dez. de 2018
Respostas 1
Participantes 2