2013-03-01 87 views
0

我想在JTable中添加行,但它不能正常工作。有人能幫助我嗎?表顯示正常,但不是動態的使用JCreator將行添加到JTable

//displays all data in Jtable 
void refresh() 
{ 
    Vector<Vector<String>> data = new Vector<>(); 

     ResultSet rs = st.executeQuery("SELECT * FROM tblInfo"); 

     while(rs.next()) 
     {   
     Vector<String> d = new Vector<>(); 
     d.add(rs.getString("ID")); 
     d.add(rs.getString("Name")); 
     d.add(rs.getString("User")); 
     d.add(rs.getString("Pass")); 
     data.add(d); 
     } 


     Vector<String> header = new Vector<>(); 
     header.add("ID"); 
     header.add("Name"); 
     header.add("Username"); 
     header.add("Password"); 

     model = new DefaultTableModel(data, header); 
     table = new JTable(model); 
     st.close(); 
     rs.close(); 

     table.setBackground(Color.LIGHT_GRAY); 
     table.setForeground(Color.white); 
     scroll = new JScrollPane(table); 
     getContentPane().add(scroll); 

    st.close(); 
    rs.close(); 
} 

//adding data to database 
void addDoctor() 
    { 


     st.executeUpdate("INSERT INTO tblInfo(Name) VALUES ('Name')"); 

    st.close(); 
} 




public void actionPerformed(ActionEvent e){ 
    Object source = e.getSource(); 


    else if(btnAdd == source) 
    { 

     addDoctor(); 
     refresh();  
    } 

感謝您的任何迴應。 :) 我已經編輯此代碼之前,我已經發布。

+0

這是什麼意思「表顯示正常,但不是動態」?你看到表中沒有數據嗎? – keuleJ 2013-03-01 09:42:25

+0

我可以看到表格中的數據。問題是,添加數據後,它不會反映在JTable中,除非我將重新運行程序。 – 2013-03-01 10:00:47

+0

請修改您的問題以包含顯示您描述的問題的[sscce](http://sscce.org/)。 – trashgod 2013-03-01 10:16:36

回答

1

1)不要在try - catch - finally block內部創建任何對象;對於Swing GUI,先準備好這些對象,最好是局部變量。

2)您創建了一個新的

model = new DefaultTableModel(data, header); 
table = new JTable(model); 

和那些對象也許從來沒有加入到已經可見GUI。 Swing GUI不在乎,並且容器不知道你改變了(重置,重新初始化)底層模型和JTable。您必須通知Swing GUI進行更改,但這不是正確的方法。

3)不要在運行時重新創建此對象,請重用已存在的對象,只創建一次JTable和DefaultTableModel。

4)通過使用model.setRowCount(0);復位DefaultTableModel,然後從JDBC

5添加一個新行)不要重新發明輪子,搜索ResultSetTableModelTableFromDatabase

6)將代碼行st.close(); & rs.close();移動到finally block

+0

我不知道有什麼問題。我的JTable不令人耳目一新。我需要做什麼? – 2013-03-01 10:08:19

+0

「請注意,傳入'dataVector'的'null'值會導致未指定的行爲,並且可能是異常。」另請參閱本[回答](http://stackoverflow.com/a/15057052/230513)。 – trashgod 2013-03-01 10:12:09

+0

@trashgod你是對的,謝謝 – mKorbel 2013-03-01 10:58:15

0

使用DefaultTableModel.setDataVector()將新數據添加到現有TableModel/JTable中。或者使用insertRow/removeRow方法。或者實現你自己的AbstractTableModel。

+0

如何使用insertRow方法?你能教我嗎?謝謝。 – 2013-03-01 10:27:44

+0

使用insertRow(int row,Vector rowData)方法,您只需在表格中的某處插入一行。使用行參數你說你想插入rowData。 – keuleJ 2013-03-01 11:35:46