将空行添加到空白的java表中?

时间:2014-07-16 03:16:43

标签: java swing jtable

我这里有一个代码,我对如何使这个东西工作很困惑。该计划的目的是显示我们当前的库存清单。我希望它自动添加到我的表中。我怎么能这样做?

我的错误行是

                    String[] itemize = { s1,s2,s3,s4,s5,s6,s7,s8,s9,s0 };
                //invTable.addRow(itemize);

我还包含了我的代码,万一有人需要测试它。谢谢!

    invTable.setAutoCreateRowSorter(true);
    invTable.setModel(new javax.swing.table.DefaultTableModel(
    new Object [][] {{null, null, null, null, null, null, null, null, null, null}},
        new String [] {
            "Item", "Code", "Weight", "Doctor", "Supplier", "Department", "Cost", "Price", "Quantity", "Threshold"
        }
    ));

我认为问题在于上面的代码。

在本网站的人们的帮助下,我终于成功了。我刚刚删除了上面的代码。

 private void insertRows() throws SQLException, Exception{
        modelx = new DefaultTableModel();
        modelx.addColumn("Name");
        modelx.addColumn("ID");
        modelx.addColumn("Weight");
        modelx.addColumn("Doctor");
        modelx.addColumn("Supplier");
        modelx.addColumn("Department");
        modelx.addColumn("Cost");
        modelx.addColumn("Price");
        modelx.addColumn("Quantity");
        modelx.addColumn("Threshold");
                                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

                database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=D:\\floresClinic.accdb;";
        conn = DriverManager.getConnection(database, "", "");
        s = conn.createStatement();
                rs = s.executeQuery("SELECT * FROM medItem ");
                 int cou = 0;
                    while(rs.next())
                    {
                                  s1 = rs.getString("productName");
                                  s2 = rs.getString("productID");
                                  s3 = rs.getString("productWeight");
                                  s4 = rs.getString("doctor");
                                  s5 = rs.getString("sName");
                                  s6 = rs.getString("department");
                                  s7 = rs.getString("unitCost");
                                  s8 = rs.getString("unitPrice");
                                  s9 = rs.getString("quantity");
                                  s0 = rs.getString("threshold");
                                  if(!s2.equals("Select?")){
                                  modelx.insertRow(0, new Object [] {s1, s2, s3, s4, s5, s6, s7, s8, s9, s0});
                                  //String[] itemize ={s1,s2,s3,s4,s5,s5,s7,s8,s9,s0};
                                  //System.out.println(s1+s2);
                                  //modelx.addRow(itemize);  

                                  }
                            cou++;
                    }  

    }

我现在唯一的问题是它向后显示。第一行包含数据库表的最后一行。

2 个答案:

答案 0 :(得分:0)

 invTable = new JTable();
 invTable.setModel(modelx) 

// you CAN'T SKIP .setColumnIdentifiers() or your rows won't show up              
   modelx.setColumnIdentifiers("col1","col2","col3","col4","col5","col6","col7","col8","col9","col0");

然后通过调用.addRow()方法使用DefaultTableModel的引用添加这些行。

while(rs.next()){
    ............
    ............

    modelx.addRow(new Object[]{s1,s2,s3,s4,s5,s5,s7,s8,s9,s0});

}
  • 我很难测试你的代码,因为我没有那种数据库,但我的解决方案应该有效!

答案 1 :(得分:0)

所以这是一个问题。当您拖放表时,在intComponents方法内处理初始化表并将表添加到容器的过程中涉及的所有内容。因此,在您的情况下,会添加新的JTable

但是在您的insertRow中,您通过<{1}} invTable创建了JTable的新实例

invTable = new JTable(model);

所以最终发生的是在构造函数中调用initComponens(),它初始化并添加原始表。但随后调用了insertRow(),这使得invTable成为一个完全不同的实例。

那么你应该做的只是取出invTable = new JTable(model);。您可以创建一个新的DefaultTableModel。我实际上会推荐它(因为在这种情况下,对模型的addRow()的调用将导致重绘,这是低效的)。将所有行添加到新模型后,然后调用invTable.setModel(model);


  

&#34;我现在唯一的问题是它向后显示。第一行包含我的数据库表的最后一行&#34;

这是你的问题

modelx.insertRow(0, ....)
                 ^
                 |

你继续插入第0行,这将推动所有先前添加的行,因此&#34;落后&#34; 。您可能想要使用insertRow(cou, ....) ..但这是不必要的。只需使用modelx.addRow(...);

即可