gpt4 book ai didi

java - 为什么我的 for 循环只返回 JTable 中的第一个值?

转载 作者:行者123 更新时间:2023-11-30 07:33:11 24 4
gpt4 key购买 nike

所以我使用这个 for 循环来遍历第一列中保存的值。然后,如果用户输入的值等于 Stringhold 中保存的值,则 if 语句将删除该行。我可以删除第一行,但无法删除此后的任何行。我做错了什么?

Screenshot

 private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {                                          
//adds a row to table
String name = JOptionPane.showInputDialog("Enter");
DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
model.addRow(new Object[]{name, "JohnSMith@example.com", "03-16/05-17"});

}

private void deleteButtonActionPerformed(java.awt.event.ActionEvent evt) {
// deletes row from table
String dName = JOptionPane.showInputDialog("Enter");
DefaultTableModel model = (DefaultTableModel) jTable1.getModel();

int rows = jTable1.getRowCount();

for(int i = 0; i <= rows;i++){
String hold = jTable1.getValueAt(i, 0).toString();
if(hold.equals(dName)){
model.removeRow(i);
}
break;

}
}

最佳答案

代码中的问题:

  1. 您有 break;在你的 for 循环中,它可能放错了地方。您是否打算将其纳入if(hold.equals(name)){}阻止?

  2. 您正在使用 View 索引模型中删除行。 JTable.getRowCount 返回 View 中的行数,而不是模型。由于过滤, View 中的行数可能与模型中的行数不同。

    然后,您使用索引迭代行,在 View 中查找值,然后从模型中删除。当您在 JTable 中进行排序时,这将失败。

    您需要使用 JTable.convertRowIndexToView 将 View 索引转换为模型索引,反之亦然和 JTable.convertRowIndexToModel .

    对于列来说也是如此,用户可以通过将列拖动到不同的位置来重新排列列。调用jTable1.getValueAt(i, 0)将为您提供 View 第一列中的值,而不是模型。查看 JTable.convertColumnIndexToView JTable.convertColumnIndexToModel .

  3. 当这些行被删除时,模型中的行数当然会发生变化,因此使用i<rows进行检查会导致数组超出索引异常。

<小时/>

删除匹配行的两种替代方法(按照我的偏好顺序):

  1. 使用 for(int i=0;i!=model.getRowCount();++i) 循环模型。使用 model.getValueAt() 查找值。删除 model.removeRow() 的行,然后递减循环变量(例如 model.removeRow(i--); )。

  2. 迭代模型的 dataVector 查找要删除的行,并使用 Iterator.remove 删除它们。循环结束后,调用 fireTableChanged 在您的模型上。

关于java - 为什么我的 for 循环只返回 JTable 中的第一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35769859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com