Java TableModel, дублирующие строки - Как я могу предотвратить это?

Итак, в приложении я создал search for name страница, где пользователь введет туда имя и в качестве user types (При каждом нажатии клавиши) SQL Заявление выполняется, что получит записи like 'name%',

Это работает нормально, но когда дело доходит до помещения значений в table каждый раз, когда пользователь нажимает клавишу append найденные результаты в таблицу вместо замены значений. Это означает, что каждый раз, когда нажимается клавиша... создаются повторяющиеся строки.

Поэтому мне было интересно, есть ли у кого-нибудь решение остановить дублирование строк и заменить их новыми значениями? Я использую модель таблицы по умолчанию:

private DefaultTableModel tModel = new DefaultTableModel(0, 0);

Мой код:

 @Override
        public void keyReleased(KeyEvent e) {
            updateTable();
            table.setModel(tModel);
            formPanel.add(table);
                         tModel.fireTableDataChanged();

    }
    public void updateTable(){
         System.out.println("Save member 1");

            try{
             //CHANGE THE VALUES SO WHEN CLICKS SAVE MEM

                /*-------------------------------------*/   

            //Connection + Statement
            conDB = getConnection();
            stmt = conDB.createStatement();
            String searchSql = "select * from members where name "
                    + " LIKE '" + txtName.getText() +"%'"; 
                if(!txtName.getText().equals(""))
                {
                    r = stmt.executeQuery(searchSql);
                }
                System.out.println("searching");
                tModel.setColumnIdentifiers(columnNames);
                while(r.next()){
                    tModel.addRow(new Object[] { 
                        r.getString("name")
                    });
                } 
            }
            catch(SQLException er){
                System.out.println("Error was: " + er);
            }
    }

public searchBoth(){
        super("Search");
        this.setBounds(400, 500, 854,400);
        this.setVisible(true);
        mainCon.add(formPanel);

        formPanel.add(lblName);
        formPanel.add(txtName);
        txtName.addActionListener(this);
        addKeyListener(this);
        txtName.addKeyListener(this);
    }

1 ответ

Решение

Задавать rowCount до 0 и добавить строки. Это удалит существующие строки и добавит новые строки

tModel.setRowCount(0);

код

System.out.println("searching");
tModel.setRowCount(0);// *********************remove current rows to replace
tModel.setColumnIdentifiers(columnNames);
while(r.next()){
    tModel.addRow(new Object[] { 
        r.getString("name")
    });
}
Другие вопросы по тегам