Java 如何更新多行列的表模型?
我在tablemodel中有3行。每行包含9列(o-8)。我想更新每行的最后一列…但现在我只能更新第1行最后一列..请帮助`Java 如何更新多行列的表模型?,java,swing,jtable,tablemodel,Java,Swing,Jtable,Tablemodel,我在tablemodel中有3行。每行包含9列(o-8)。我想更新每行的最后一列…但现在我只能更新第1行最后一列..请帮助` ` SAVE=new JButton("SAVE"); SAVE.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { String Status=
` SAVE=new JButton("SAVE");
SAVE.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
String Status=null ;
DbUtility ViewAbsenties=new DbUtility();
ViewAbsenties. loadDriver();
ViewAbsenties.connect();
TableModel tm;
tm = table3.getModel();
int i = table3.getRowCount();
System.out.println("row count"+i);
try{
while(i!=0){
Status =(String) tm.getValueAt(0,8);
String Employeeid = (String) tm.getValueAt(i,0);
System.out.println("Status: " + Status);
System.out.println("Employeeid: " + Employeeid);
ViewAbsenties.executeUpdateQuery2(Status,Employeeid);
System.out.println("i"+i);
i=i-1;
}}
catch (Exception e5) {
}
});
你应该使用
Status =(String) tm.getValueAt(i,8);
String Employeeid = (String) tm.getValueAt(i,0);
而不是
Status =(String) tm.getValueAt(0,8);
String Employeeid = (String) tm.getValueAt(0,0);
getValueAt中的第一个参数是rowIndex,您应该传递要更新的行的索引,但只更新循环中的第0行。我决定总结我在上述注释中提到的观察结果 你的代码有几个问题
- 在相同的循环周期中,您调用
和i++
,这使得循环的变量是不变的,因此您的循环是无止境的(您已经解决了这个问题)i=i-1
- 您仍在调用
。第一个参数是tm.getValueAt(0,8)
,第二个参数是行索引
。因此,对于每个迭代,您仍然使用第一行,而不是当前行列索引
- Java通常将模型和数组从
索引到0
,但您需要从length-1
迭代到length
。因此,您需要将变量1
降低i
1
int i = table3.getRowCount() - 1;
while( i >= 0 ){
Status = (String) tm.getValueAt( i, 8 );
String Employeeid = (String) tm.getValueAt( i, 0 );
System.out.println( "Status: " + Status );
System.out.println( "Employeeid: " + Employeeid );
ViewAbsenties.executeUpdateQuery2( Status, Employeeid );
System.out.println( "i" + i );
i = i - 1;
}
注意:
总之,我有几点意见可以改进您的代码风格:
- 上面的例子是循环的确切用例
- 基于Java约定,变量名应以非大写字母开头
for ( int i = 0; i < table3.getRowCount(); ++i ) { status = (String) tm.getValueAt( i, 8 ); String employeeid = (String) tm.getValueAt( i, 0 ); System.out.println( "Status: " + status ); System.out.println( "Employeeid: " + employeeid ); ViewAbsenties.executeUpdateQuery2( status, employeeid ); System.out.println( "i" + i ); }
for(int i=0;i
i++
和i=i-1
,这使得i
变量在循环条件下保持不变。它看起来像一个无限循环。我想你的问题的解决方案就在于此,所以删除I++
语句,将tm.getValueAt(0,0)
修改为tm.getValueAt(I,0)
,你应该会没事的;我尝试了这个,但是现在没有得到任何结果。在循环的第一行仍然有tm.getValueAt(0,8)
。我猜您希望独立地处理每个表行。我还注意到您初始化了inti=table3.getRowCount()当您调用tm.getValueAt(i,0)
时。我不知道这是怎么回事,但在Java中,数组、模型等通常是从0
到length-1
,但您是从1
到length
调用它们的。因此,我建议您进行以下修复:inti=table3.getRowCount()-1代码>和而(i>=0)
。顺便说一句,我认为这是for
循环而不是while
的好用例。它将更易于阅读,以便更快地获得更好的帮助。硬编码表数据。您不应该有空的catch(异常e)
块。始终打印stacktrace、写入日志消息或其他内容,但永远不要使用空的catch块。当事情出错时,这只会使调试变得更加困难。