我这里有一个代码,我对如何使这个东西工作很困惑。该计划的目的是显示我们当前的库存清单。我希望它自动添加到我的表中。我怎么能这样做?
我的错误行是
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++;
}
}
我现在唯一的问题是它向后显示。第一行包含数据库表的最后一行。
答案 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(...);