使用JCreator向JTable添加行

时间:2013-03-01 09:27:56

标签: java swing jtable variable-assignment

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

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

2 个答案:

答案 0 :(得分:1)

1)不要在try - catch - finally block内创建任何对象;对于Swing GUI,之前准备这些对象,更好地作为局部变量。

2)你创建了一个新的

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

并且那些Object可能永远不会添加到已经可见的GUI中。 Swing GUI并不在意,并且容器不知道您更改(重置,重新初始化)底层模型和JTable。您必须通知Swing GUI更改,但这不是正确的方法。

3)不要在运行时重新创建此Object,重用已存在的对象,只创建一次JTable和DefaultTableModel。

4)使用DefaultTableModel重置model.setRowCount(0);,然后从JDBC添加新行

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

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

答案 1 :(得分:0)

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