[Resolvido] disparando um fireTableRowsUpdated através de um outro frame

Seguinte galera,

Estou estudando Swing, desenvolvendo um aplicativo jurídico de consulta de rubricas. Até agora ele tem dois frames, o primeiro contendo a seguinte JTable:


(o campo id vai sair da tabela depois)

Nesse caso, somente uma linha é selecionável. Ao clicar na linha e no botão “Editar”, pego os dados da linha selecionada e abro um novo frame, contendo os JTextFields já populados com os respectivos dados. Aí o código do ActionPerformed:

    private void editarButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
        
        int viewRow = tabela.getSelectedRow();
        if (viewRow == -1) {
            JOptionPane.showMessageDialog(null, "Selecione uma linha para ser alterada.");
        } else {

        int modelRow = tabela.convertRowIndexToModel(viewRow);
        RubricaTableModel modelo = (RubricaTableModel) tabela.getModel();
        Rubrica rubrica = modelo.getRubrica(modelRow);
        
        RubricaUpdateGUI rubricaUpdate = new RubricaUpdateGUI(rubrica.getId(), rubrica.getDescricao(), rubrica.getAmbito(), rubrica.getCodigo());
        rubricaUpdate.setVisible(true);
        rubricaUpdate.setAlwaysOnTop(true);
        }
    } 

Segundo frame:

A dúvida que estou tendo é a seguinte: Como faço para acionar um fireTableRowsUpdated ou algo do tipo na primeira tabela ao clicar no botão “Atualizar”, no segundo frame??

A propósito, tô usando um TableModel baseado no modelo do Eric Yuzo, taí o código:

public class RubricaTableModel extends AbstractTableModel {

    private List<Rubrica> linhas;

    private String[] colunas = new String[]{
        "id", "Descricao", "Ambito", "Codigo"};

    public RubricaTableModel() {
        linhas = new ArrayList<Rubrica>();
    }

    public RubricaTableModel(List<Rubrica> rubricas) {
        linhas = new ArrayList<Rubrica>(rubricas);
    }

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

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

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

	@Override
    public Class<?> getColumnClass(int columnIndex) {
        switch (columnIndex) {
            case 0:
                return int.class;
            case 1:
                return String.class;
            case 2:
                return String.class;
            case 3:
                return long.class;
            default:
                throw new IndexOutOfBoundsException("columnIndex out of bounds");
        }
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Rubrica rubrica = linhas.get(rowIndex);
        switch (columnIndex) {

            case 0:
                return rubrica.getId();
            case 1:
                return rubrica.getDescricao();
            case 2:
                return rubrica.getAmbito();
            case 3:
                return rubrica.getCodigo();
            default:
                throw new IndexOutOfBoundsException("columnIndex out of bounds");
        }
    }

    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {

    }

	@Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return false;
    }

    public Rubrica getRubrica(int indiceLinha) {
        return linhas.get(indiceLinha);
    }

    public void addRubrica(Rubrica rubrica) {
        linhas.add(rubrica);

        int ultimoIndice = getRowCount() - 1;
        fireTableRowsInserted(ultimoIndice, ultimoIndice);
    }

    public void removeFicha(int indiceLinha) {	
        linhas.remove(indiceLinha);

        fireTableRowsDeleted(indiceLinha, indiceLinha);
    }

    public void addListaDeRubrica(List<Rubrica> rubricas) {
        int tamanhoAntigo = getRowCount();
        linhas.addAll(rubricas);
        fireTableRowsInserted(tamanhoAntigo, getRowCount() - 1);
    }

    public void limpar() {
        linhas.clear();
        fireTableDataChanged();
    }

    public boolean isEmpty() {
        return linhas.isEmpty();
    }
}

Desde já, valeu a ajuda! :slight_smile:

Bom, existe o pattern observable e as soluções menos nobres:

  • Passar a instância do JFrame (inteiro) que representa a tabela para o objeto do novo JFrame.
OutroFrm frm2 = new OutroFrm(this);
  • Passar a instância do objeto do TableModel para o objeto do JFrame.
OutroFrm frm2 = new OutroFrm(getOTableModel());

Beleza, resolvi mudando o segundo frame para JDialog e adaptando as soluções “menos nobres”. O Observer Pattern parece ser bem interessante, vou dar uma estudada nele por aqui!
valeu pela dica drsmachado!