Updating a JTable after setModel

I have a JTable and I can’t manage to make it update its content, I am in IntelliJ IDEA.

I’ll share some code first

I have all the objects declared in the main class, which extends a JFrame

private Object[][] transactionsData;
private String[] transactionsColumnNames = new String[] {"uid","data","ora","product","ini","amount","final"};
private DefaultTableModel transactionsModel;
private JTable transactionsTable;

Then in the createUIComponents() method, that I managed to understand, is called at the very beginning, when the UI needs to be created, I initialize the table like this:

    transactionsData = Main.db.getTransactions();
    transactionsModel = new DefaultTableModel(transactionsData,transactionsColumnNames);
    transactionsTable = new JTable(transactionsData,transactionsColumnNames){
        public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
            Component component = super.prepareRenderer(renderer, row, column);
            int rendererWidth = component.getPreferredSize().width;
            TableColumn tableColumn = getColumnModel().getColumn(column);
            tableColumn.setPreferredWidth(Math.max(rendererWidth + getIntercellSpacing().width, tableColumn.getPreferredWidth()));
            return component;


    transactionsTable.setDefaultEditor(Object.class, transactionsEditor);
    transactionsTable.getTableHeader().setFont(new Font("Segoe",Font.PLAIN,16));

    sorter = new TableRowSorter<>(transactionsTable.getModel());
    transactionsTable.getSelectionModel().addListSelectionListener(e -> {
        if ( transactionsTable.getSelectedRows().length > 0 ) {
            logUIDField.setText(transactionsTable.getValueAt(transactionsTable.getSelectedRow(), 0).toString());

Now, each time I click a button i switch the content of the frame and the table is displayed, I need it to update its content before being displayed, because its content is taken from an online database, and of course, its content may have changed, so I do this:

    storicoButton.addActionListener(e -> {

        if( Main.db.hasTag() )

        transactionsData = Main.db.getTransactions();
        transactionsModel = new DefaultTableModel(transactionsData, transactionsColumnNames);


        CardLayout cardLayout = (CardLayout) rootPanel.getLayout();
        cardLayout.show(rootPanel, "Card4");

But I can’t manage to make it update its content, I tried everything I could find on the internet, and on this site, but everyone says to just use setModel, but it doesn’t work, and I can’t find what I’m doing wrong.

I tried to read the sizes of transactionsData, transactionsModel and transactionsTable before and after I click the button, transactionsData and transactionsModel actually update, since their size changes accordingly ( I checked looking at the database while I ran the program ) but transactionsTable doesn’t change at all.

I tried repaint(), various methods that looks like “updateSomething”, I tried with local variables, global variables, initializing new model, updating the model, initializing the table with the model or with data and columns, nothing. I’m desperate.

I hope someone here can help me.

At the moment here is late, and tomorrow I need to wake up early, after work I’ll try starting clean, rewriting everything from scratch, maybe I’ll find the solution myself, in the mean time I hope someone here could push me in the right direction at least.

Il post the code of that uidFilter() which I found online, it’s the first thing I’m going to remove tomorrow, because I suspect it can change something, but I don’t have the time to do that now

private void uidFilter() {
    RowFilter<TableModel, Object> rf = null;
    //If current expression doesn't parse, don't update.
    try {
        rf = RowFilter.regexFilter(logUIDField.getText(), 0);
    } catch (java.util.regex.PatternSyntaxException e) {