0

我想在 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();      
    }

感谢您的任何回复。:) 我在发布之前已经编辑了这段代码。

4

2 回答 2

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。

DefaultTableModel4)通过使用重置model.setRowCount(0);然后从JDBC添加新行

5)不要重新发明轮子,搜索ResultSetTableModelor TableFromDatabase

6) 将代码行st.close();& 移动rs.close();finally block.

于 2013-03-01T09:42:02.597 回答
0

使用DefaultTableModel.setDataVector()将带有新数据的新向量添加到现有 TableModel/JTable。或者使用 insertRow/removeRow 方法。或者实现你自己的 AbstractTableModel。

于 2013-03-01T10:20:27.080 回答