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

将空白行添加到空白java表中?,java,swing,jtable,Java,Swing,Jtable,我这里有一个代码,我很困惑如何使这件事的工作。该程序的目的是显示我们当前的库存清单。我希望它自动添加到我的表中。我该怎么做 我的错误路线是 String[] itemize = { s1,s2,s3,s4,s5,s6,s7,s8,s9,s0 }; //invTable.addRow(itemize); 我还包括了我的代码,以防有人需要测试它。谢谢 invTable.setAutoCreateRowSorter(tr

我这里有一个代码,我很困惑如何使这件事的工作。该程序的目的是显示我们当前的库存清单。我希望它自动添加到我的表中。我该怎么做

我的错误路线是

                    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++;
                    }  

    }
多亏了这个网站上的人的帮助,我终于成功了。我刚刚删除了上面的代码

 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++;
                    }  

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

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

}
  • 我很难测试您的代码,因为我没有那种数据库,但我的解决方案应该可以工作
      所以这里有个问题。拖放表时,初始化表和将表添加到容器的过程中涉及的所有内容都在
      intComponents
      方法中处理。因此,在您的例子中,添加了一个新的
      JTable

      但是在您的
      insertRow
      中,您可以通过执行以下操作来创建
      invTable
      的一个新实例
      JTable

      invTable = new JTable(model);
      
      因此,最终将在构造函数中调用
      initComponens()
      ,初始化并添加原始表。但是随后调用了
      insertRow()
      ,这使得
      invTable
      成为一个完全不同的实例

      因此,您应该做的是去掉
      invTable=newjtable(model)。您可以创建一个新的
      DefaultTableModel
      ,这很好。实际上,我建议在这种情况下使用它(因为调用模型的
      addRow()
      将导致重新绘制,这是低效的)。将所有行添加到新模型后,调用
      invTable.setModel(model)


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

      这是你的问题

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

      您继续将插入到第0行,这将向下推之前添加的所有行,因此出现“落后”。您可能想使用
      insertRow(cou,…)
      。。但这是不必要的。只需使用
      modelx.addRow(…)

      尝试直接将行添加到TableModel而不是JTable…您不应该将值提取为字符串,因为单位成本、单位价格、数量、阈值在本质上都是数字,所以方法
      insertRow()
      的命名语义意味着该方法应该一次只插入一行。我不认为每次添加一行时都应该创建一个新的表和表模型。除非我对方法名的理解有误。只是一个想法。为了更快地获得更好的帮助,发布一个(最小的、完整的、可验证的示例)。328 LOC不是“最小”。将行添加到表模型,然后将模型设置到表@Fev现在没有错误,它只是不在我的表单上显示行。我认为它在工作,我遗漏了一些东西。@Daniel,尝试更改这行invTable=new JTable(modelx);TO invTable=new JTable();然后是invTable.setModel(modelx)。看看它是否有效。