2014-12-04 3 views
0

Я заполняю JTable из базы данных доступа. при первом запуске кода таблица отлично загружается. Затем добавление новых записей в базу данных из JDialog. То, что я пытался сделать, это вызвать метод loadData(), когда JDialog закрыт, но таблица не обновляется.Как обновить JTable после вставки данных в базу данных?

Это мой loadData() метод:

private void loadData() { 
    System.out.println("sssss"); 
    final String [] columnNames={"Seq", "First Name", "Last Name","Num1","Num2","Num3"}; 
    connectDb(); 

    data = new Object[rows][columns]; 
    int row = 0; 
    try { 
     while(rs.next()){ 
      for(int col = 0 ; col<columns; col++){ 
       if(col==0) 
        data[row][col]=rs.getString("contact_seq"); 
       if(col==1) 
        data[row][col]=rs.getString("contact_fname"); 
       if(col==2) 
        data[row][col]=rs.getString("contact_lname"); 
       if(col==3) 
        data[row][col]=rs.getString("contact_num1"); 
       if(col==4) 
        data[row][col]=rs.getString("contact_num2"); 
       if(col==5) 
        data[row][col]=rs.getString("contact_num3"); 


      } 
      row++; 
     } 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    model = new DefaultTableModel(data, columnNames){ 

     /** 
     * 
     */ 
     private static final long serialVersionUID = 1L; 

     public boolean isCellEditable(int row, int column) 
     { 
      return false; 
     } 



    }; 

    table = new JTable(model); 
}` 

это, как я называю метод LoadData при закрытии JDialog.

JMenuItem mntmNew = new JMenuItem("New Contact"); 
    mntmNew.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      addData gui = new addData(viewData.this,rs); 
      gui.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 
      gui.setVisible(true); 
      gui.addWindowListener(new WindowAdapter() { 
       public void windowClosed(WindowEvent e){ 
        loadData(); 
       } 
      }); 
     } 
    }); 
    mnFile.add(mntmNew); 

Моя база данных обновляется при добавлении записей, но Jtable не обновляется.

ответ

4

Здесь:

private void loadData() { 
    ... 
    table = new JTable(model); // don't re-create the table here 
} 

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

private void loadData() { 
    ... 
    table.setModel(model); 
    // Of course, table should have been initialized 
    // and placed first, and only once! 
} 

См. Примеры here (включает SwingWorker для создания вызовов базы данных в фоновом потоке), here и here. Пожалуйста, взгляните на эти ответы, есть объяснения, чтобы понять суть.

+1

Спасибо dic19. это работает для меня. Я добавил 'table = new JTable (model)' to constructor method, а затем в метод конструктора, называемый методом loadData(). И моя таблица занимает некоторое время, чтобы загрузить. Итак, теперь я буду делать те же изменения, что и ваши примеры. –

0

Это выстрел в темноте, но, возможно, это будет работать ?:

public void windowClosed(WindowEvent e) { 
    loadData(); 
    // Add this line: 
    table.repaint(); 
} 

Если я понимаю, что происходит, основная база данных становится обновляется, но JTable компонент не показывать обновления. Я предполагаю, что вам просто нужно вызвать метод repaint(), чтобы JTable также обновлялся.

+0

спасибо нихилон. это не сработало для меня. Но я собираюсь узнать больше о методе 'repaint()'. –

+0

Не волнует @broken_code, моя догадка была неправильной. Неправильно. Но вот почему мы здесь, правда? Учить! – nihilon

0

Это работает для меня:

if (model.getRowCount() > 0) { 
    for (int i = model.getRowCount() - 1; i > -1; i--) { 
     model.removeRow(i); 
    } 
} 

setTablevalue(); 

Я удалил все строки из JTable и снова вызвал метод setTableValue повторно заполнить таблицу.

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