Java 使用JCreator将行添加到JTable

Java 使用JCreator将行添加到JTable,java,swing,jtable,variable-assignment,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())

我想在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();      
    }
//显示Jtable中的所有数据
无效刷新()
{
向量数据=新向量();
结果集rs=st.executeQuery(“从tblInfo中选择*);
while(rs.next())
{           
向量d=新向量();
d、 添加(rs.getString(“ID”);
d、 添加(rs.getString(“名称”);
d、 添加(rs.getString(“用户”);
d、 添加(rs.getString(“Pass”);
数据.添加(d);
}
向量头=新向量();
标题。添加(“ID”);
标题。添加(“名称”);
标题。添加(“用户名”);
标题。添加(“密码”);
模型=新的DefaultTableModel(数据,标题);
表=新JTable(型号);
圣克洛斯();
rs.close();
表.立根背景(颜色:浅灰色);
表.设置前景(颜色.白色);
滚动=新的JScrollPane(表格);
getContentPane().add(滚动);
圣克洛斯();
rs.close();
}
//向数据库添加数据
void addDoctor()
{
st.executeUpdate(“插入tblInfo(名称)值(‘名称’)”);
圣克洛斯();
}
已执行的公共无效操作(操作事件e){
对象源=e.getSource();
else if(btnAdd==源)
{
addDoctor();
刷新();
}
谢谢您的回复。:) 在我发布之前,我已经编辑了这段代码。

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) 不要重新发明轮子,搜索
resultsetablemodel
TableFromDatabase


6) 将代码行
st.close();
rs.close();
移动到
最终块
用于将新数据的新向量添加到现有的TableModel/JTable中。或者使用insertRow/removeRow方法。或者实现您自己的AbstractTableModel。

这是什么意思“Table显示正常但不是动态的”?您在表中没有看到任何数据吗?我可以在表中看到数据。问题是,添加数据后,它不会反映在JTable中,除非我将重新运行程序。请编辑您的问题,以包括显示您描述的问题的。若要刷新现有表,只需重新创建模型,然后使用
Table.setModel(…);
。我不知道问题出在哪里。我的JTable没有刷新。我需要做什么?“请注意,为
dataVector
传递
null
值会导致未指定的行为,可能会导致异常。”另请参见此。很高兴提供帮助;这是我从那天开始学习的项目;+1表示其他观点;抱歉编辑工作量过大。如何使用insertRow方法?您能教我吗?谢谢。使用insertRow(int row,Vector rowData)方法您只需在表中的某个位置插入一行。使用row参数,您可以指定要在哪一点插入rowData。