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

标签 java swing if-statement for-loop jtable

所以我使用这个 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/

相关文章:

java - 如何将嵌套 JSON 数组转换为 java 对象?

java - 如何获得 JList 的选定项目列表?

java - 不输入 Y/N 时返回错误

r - 将两个变量组合成新变量

python-2.7 - 机器人框架中的 If Else-if

java - Tomcat:严重:加载 WebappClassLoader 时出错

java - 有没有更好的方法将文件的全部内容写入 OutputStream?

java - 试图从广播接收器开始一个 Activity

java - 在一行中调整图像和文本

Java - 关闭事件窗口