2014-09-10 85 views
-1

如何刷新JTable?使用來自Access數據庫的JcomboBox項目刷新JTable數據

這是我的代碼。

public void itemStateChanged(ItemEvent evt) 
    { 
     String text=(String)to_Cmb2.getSelectedItem(); 
     try 
     { 
      // Connect to an Access Database 
       Connection con=DriverManager.getConnection("jdbc:odbc:flightdsn"); 
       Statement s=con.createStatement(); 
      // Read data from a table 
       ResultSet rs = s.executeQuery("SELECT FlightNo,City,To,Arrives,Departs FROM I_Flights_Routes WHERE To ='"+text+"' "); 
       ResultSetMetaData md = rs.getMetaData(); 
       int columns = md.getColumnCount(); 

      // Get column names 
      for (int i = 1; i <= columns; i++) 
      { 
       columnNames.addElement(md.getColumnName(i)); 
      } 
      // Get row data 
      while (rs.next()) 
      { 
       Vector<Object> row = new Vector<>(columns); 

       for (int i = 1; i <= columns; i++) 
       { 
        row.addElement(rs.getObject(i)); 
       } 

       data.addElement(row); 
      } 
      rs.close(); 
      s.close(); 
      con.close(); 
     } 
     catch (Exception e) 
     { 
      System.out.println(e); 
     } 
     // Create table with database data 
     JTable table = new JTable(data, columnNames) 
     { 
      public Class getColumnClass(int column) 
      { 
       for (int row = 0; row < getRowCount(); row++) 
       { 
        Object o = getValueAt(row, column); 

        if (o != null) 
        { 
         return o.getClass(); 
        } 
       } 
       return Object.class; 
      } 
     }; 
     JScrollPane scrollPane = new JScrollPane(table); 
     scrollPane.setBounds(50,10,400,200); 
     td.add(scrollPane); 
     // td is Jpanel object 
     td.setVisible(true); 
    } 
+0

你有什麼錯誤? – AndreDuarte 2014-09-10 16:36:41

+0

當我從JComboBox中選擇下一個項目JTable劑量未用新數據更新時, – 2014-09-10 16:39:01

+0

並在另一個表格後面顯示新表格,其中包含以前的數據行和新行中的新數據。 – 2014-09-10 16:44:31

回答

3

您正在創建一個全新的JTable - 不這樣做。使用相同的JTable但

  • ,如果你想將新數據添加到現有的數據修改JTable中的模型
  • 或者,如果你想完全取代表中的數據,創建一個新的DefaultTableModel(或其他的TableModel)並通過`setModel(...)設置你的JTable模型。

另外,順便說一句,你會希望避免使用空佈局和setBounds(...)因爲這會產生非常不靈活的GUI的,看起來可怕在其他平臺或其他決議和對升級和管理非常困難。

+0

我如何爲我的代碼更新模型。你能幫我麼。或者你可以給我代碼 – 2014-09-10 16:49:04

+0

@arshpreetsingh:教程會告訴你。請查閱JTable教程,首先點擊。它會解釋所有。 – 2014-09-10 16:49:31

+0

@arshpreetsingh:同樣根據我的答案,您可以通過'setTable(...)'方法設置JTable的模型。要創建一個DefaultTableModel,請查看DefaultTableModel API並查看可用的構造函數。祝你好運。 – 2014-09-10 17:00:44