2013-05-22 4 views
1

Это мой TableModel, я продлил AbstractTableModelКак обновить представление JTable после добавления новой строки?

class CustomTableModel extends AbstractTableModel 
{ 
    String[] columnNames = {"Name","Contact","eMail","Address","City","Pin","State","Type","ID"}; 
    Vector<String[]> data = new Vector<String[]>(); 

    CustomTableModel() 
    { 
    try 
    { 
     //Using JDBC connection// 
     while(rs.next()) 
     { 
     String[] s=new String[9]; 
     s[0]=rs.getString(1); 
     //System.out.println(s[0]); 
     s[1]=rs.getString(2); 
     s[2]=rs.getString(3); 
     s[3]=rs.getString(4); 
     s[4]=rs.getString(5); 
     s[5]=rs.getString(6); 
     s[6]=rs.getString(7); 
     s[7]=rs.getString(8); 
     s[8]=rs.getString(9); 
     data.add(s); 
     } 
    } 
    catch(Exception e) 
    { 
     System.out.println("the exception is :"+e.toString()); 
    } 

    } 
    public int getColumnCount() { 
    int columnCount = columnNames.length; 
    return columnCount; 
    } 
    public int getRowCount() { 
    int rowCount = data.size(); 
    return rowCount; 
    } 
    public Object getValueAt(int rowIndex, int columnIndex) { 
    return data.get(rowIndex)[columnIndex]; 
    } 
    public String getColumnName(int column) { 
    return columnNames[column]; 
    } 
    public void removeRow(int r) 
    { 
    for(int i=0;i<data.size();i++) 
    { 
     String[] s = (String[])data.get(i); 
     if(s[0]==getValueAt(r,0)) 
     { 
     try 
     { 
      //using JDBC connections to delete the data from DB// 
      //also removing the value from data and also updating the view// 
      data.remove(data.get(i)); 
      fireTableRowsDeleted(r, r); 
     } 
     catch (Exception e) 
     { 
      System.out.println(e.toString()); 
     } 
     break; 
     } 

    } 
    } 
    //I am using the following code to update the view but it doesnot work// 
    public void addRow(String[] a) 
    { 
    data.add(a); 
    fireTableRowsInserted(data.size() - 1, data.size() - 1);   
    } 
} 

У меня есть класс таблицы, которая проходит CustomTableModel.

class table extends CustomTableModel 
{ 
    final JButton editButton = new JButton("Edit"); 
    final JButton deleteButton = new JButton("Delete"); 
    final JTable mytable = new JTable(new CustomTableModel()); 
    . 
    . 
    . 
}  

У меня есть кнопка добавления, и в ее исполнителе действий я использую следующий код для передачи значений, которые я хотел добавить.

String[] a = {"a","b","c","d","e","f","g","h","i"}; 
table myTableObj = new table(); 
myTableObj.addRow(a); 

Pls, дайте мне знать, где я иду не так. Thanks

+0

Вы использовали отладчик, чтобы доказать, что ваша строка 'data.add (s);' выполняется? –

+0

'Я расширил AbstractTableModel' - Что случилось с DefaultTableModel? Ваш код в основном пытается дублировать этот класс. – camickr

ответ

1

Pls препятствовало мне знать где я иду неправильно. Благодарности

String[] a = {"a","b","c","d","e","f","g","h","i"}; 
table myTableObj = new table(); 
myTableObj.addRow(a); 
  • строки кода говорят о

    1. создать новую строку

    2. создать новый JTable

    3. добавляется строка нового JTable

    4. результата в том, что новый JTable никогда не добавляется к видимому Качели GUI

    5. не делает этого, почему новый JTable воссоздан на каждых JButton мероприятию

    6. добавить String[] a... к CustomTableModel непосредственно

  • для лучшей помощи рано опубликовать SSCCE, короткий, работоспособный, компилируется

+0

Каждый раз, когда я создаю новый экземпляр таблицы, это причина, по которой представление не обновляется. – user2380811

0

таблица класс не имеет никакого смысла. Предполагается, что это будет TableModel, который будет установлен в JTable. Вместо этого у вас есть JTable, объявленный как поле внутри этого таблицы класс (который должен быть Таблица btw в соответствии с соглашением об именах Java). В результате при создании нового стола объект JTable построен внутри с другой CustomTableModel внутри. Таким образом, tableModel, в который вы добавляете строки, не является таблицей, фактически используемой вашим JTable.

0

Вы также можете использовать myCustomTable.fireTableStructureChanged();

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