首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JCreator向JTable添加行

使用JCreator向JTable添加行
EN

Stack Overflow用户
提问于 2013-03-01 17:27:56
回答 2查看 746关注 0票数 0

我想在JTable中添加行,但效果不佳。有人能帮帮我吗?表正常显示,但不是动态显示

代码语言:javascript
复制
//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();      
    }

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

EN

回答 2

Stack Overflow用户

发布于 2013-03-01 17:42:03

1)不要在try - catch - finally block中创建任何对象;对于Swing GUI,请在此之前准备好这些对象,最好将其作为局部变量。

2)您创建了一个新的

代码语言:javascript
复制
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中。

票数 1
EN

Stack Overflow用户

发布于 2013-03-01 18:20:27

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15154415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档