简体   繁体   English

使用JCreator向JTable添加行

[英]Adding row to JTable using JCreator

I want to add rows in JTable, but it didn't work well. 我想在JTable中添加行,但是效果不佳。 Could someone help me? 有人可以帮我吗? Table is displaying normal but not dynamically 表格显示正常但不是动态

//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();      
    }

Thanks for any response. 感谢您的任何回复。 :) I have edited this code before i've posted. :)我在发布之前已经编辑了此代码。

1) Don't create any Objects inside try - catch - finally block ; 1)不要在try - catch - finally block内创建任何对象; for Swing GUI, prepare these Objects before, better as local variables. 对于Swing GUI,请事先准备好这些对象,最好作为局部变量。

2) You created a new 2)您创建了一个新

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

and those Object maybe never added to the already visible GUI. 那些对象可能永远不会添加到已经可见的GUI中。 Swing GUI doesn't care somehow, and the container doesn't know that you changed (reset, reinitialize) the underlaying model and with JTable. Swing GUI不在乎,容器也不知道您已更改(重置,重新初始化)底层模型和JTable。 You have to notify Swing GUI for changes, but this isn't the proper of way. 您必须通知Swing GUI进行更改,但这不是正确的方法。

3) Don't to recreate this Object on runtime, reuse Objects that already exist, create JTable and DefaultTableModel only one time. 3)不要在运行时重新创建此Object,不要重用已经存在的Object,仅创建JTable和DefaultTableModel一次。

4) Reset DefaultTableModel by using model.setRowCount(0); 4)通过使用model.setRowCount(0);重置DefaultTableModel model.setRowCount(0); and then to add a new rows from JDBC 然后从JDBC添加新行

5) Don't to reinvent the wheel, search for ResultSetTableModel or TableFromDatabase . 5)不要重新发明轮子,搜索ResultSetTableModelTableFromDatabase

6) Move code lines st.close(); 6)移动代码行st.close(); & rs.close(); rs.close(); to the finally block . finally block

Use DefaultTableModel.setDataVector() to add a new Vector with the new Data to the existing TableModel/JTable. 使用DefaultTableModel.setDataVector()将带有新数据的新Vector添加到现有TableModel / JTable中。 Or use the insertRow/removeRow methods. 或使用insertRow / removeRow方法。 Or implement your own AbstractTableModel. 或实现您自己的AbstractTableModel。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM