2015-06-10 4 views
1

Итак, в приложении я создал страницу search for name, где пользователь вводит там имя и как user types (при каждом нажатии клавиши) запускается инструкция SQL, которая получит записи like 'name%'.Java TableModel дублирующие строки - Как остановить это?

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

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

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

для лучшей помощи, скорее всего, отправьте сообщение SSCCE/MCVE, краткое, выполнимое, компилируемое. – mKorbel

+0

1. ничего здесь не говорило о табличной модели, 2. почему причины KeyEvents запускают JDBC, 3. XxxTableModel является оправданным, 4. почему существует formPanel. add (table) ;, 5. Почему существует tModel.fireTableDataChanged(); – mKorbel

ответ

2

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

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") 
    }); 
} 
+2

Отлично! Это работало 100%. – James111

+0

плюс один, но formPanel.add (таблица); отсутствующий уведомитель для LayoutManager, результат, ничего не будет видно .... – mKorbel

+0

@mKorbel - я не включал все объявления переменных и другие файлы. Я протестировал этот бит кода, и он работает так, как он мне нужен :) – James111

Смежные вопросы