0

recently I am trying to develop my small application. Yesterday, I have faced following issue while trying to refresh data from my JTable after the button is pressed:

BRIEF INTRODUCTION

Part of my application is responsible for gathering data from Oracle database. Next, they are displayed in a table:

VIA THIS METHOD, I GET DATA FROM DATABASE

public String[][] selectQuery() {
        int a = 0;
        int b = 0;
        int c = 0;
        columns = 3;
        rows = getRowsNumber();
        dataTable = new String[rows][columns];
        try {
            statement = connection.createStatement();
            resultSet = statement.executeQuery("select * from leki");
            while (resultSet.next() && a < rows && b < rows && c < rows) {
                dataTable[a++][0] = resultSet.getString("NAZWA");
                dataTable[b++][1] = resultSet.getString("CENA").toString();
                dataTable[c++][2] = resultSet.getString("ILOSC").toString();
            }
        } catch (SQLException e) {
            LOGGER.error("Statement error!", e);
        }
        return dataTable;
    }

NOW, MY JPANEL THAT CONTAINS JTABLE

public class SearchPanel extends JPanel {
private void initializeSearchPanel() {
        query = new ExecuteQuery();
        model = new DefaultTableModel(query.selectMichalQuery(), columnNames);
        table = new JTable(model);
        rowSorter = new TableRowSorter<>(table.getModel());
        textFilter = new JTextField();

        table.setRowSorter(rowSorter);

        JPanel panel = new JPanel(new BorderLayout());
        panel.add(new JLabel("Szukaj: ".toUpperCase()), BorderLayout.WEST);
        textFilter.setFont(new Font(null, Font.BOLD, 20));
        panel.add(textFilter, BorderLayout.CENTER);

        setLayout(new BorderLayout());
        add(panel, BorderLayout.SOUTH);

        refreshButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {
                table.getModel();
                model = new DefaultTableModel(query.selectMichalQuery(), columnNames);
                table.setModel(model);
                model.fireTableDataChanged();
            }
        });

        panel.add(refreshButton, BorderLayout.EAST);
        add(new JScrollPane(table), BorderLayout.CENTER);

        textFilter.getDocument().addDocumentListener(new DocumentListener() {

            @Override
            public void insertUpdate(DocumentEvent e) {
                String text = textFilter.getText();

                if (text.trim().length() == 0) {
                    rowSorter.setRowFilter(null);
                } else {
                    rowSorter.setRowFilter(RowFilter.regexFilter("(?i)" + text, 0));
                }
            }

            @Override
            public void removeUpdate(DocumentEvent e) {
                String text = textFilter.getText();

                if (text.trim().length() == 0) {
                    rowSorter.setRowFilter(null);
                } else {
                    rowSorter.setRowFilter(RowFilter.regexFilter("(?i)" + text, 0));
                }
            }

            @Override
            public void changedUpdate(DocumentEvent e) {
            }
        });
    }
}

ISSUE

Unfortunately, my refreshButton does not work, meaning: every time I add new item to database, me table does not include any changes (after the button is pressed).

QUESTION

I did some research and I know this question was frequently asked before. I have tried what they said but still is does not work.

Could you please take a look at it?

avocato
  • 211
  • 3
  • 11

0 Answers0