【问题标题】:Previous element in arrayListarrayList 中的前一个元素
【发布时间】:2026-01-03 18:20:07
【问题描述】:

使用按钮,我试图显示我的数组列表的前一个元素,但它没有显示预期的结果,它只返回第一个元素,我想在表单中各自的字段中显示的数据

public class AutoForm extends javax.swing.JFrame {

    ArrayList<Car> carsList;

    int counter;

    public AutoForm() {
        initComponents();

        carsList= new ArrayList<Car>();
        counter = 0;

    }

private void BtnSendActionPerformed(java.awt.event.ActionEvent evt) {                                          
        String id = txtId.getText();
        String brand = JcomboBrand.getSelectedItem().toString();
        int doors = Integer.parseInt(SpinnerDoors.getValue().toString());

        Car objCar = new Car();

        objCar.setId(id);
        objCar.setBrand(brand);
        objCar.setDoors(doors);

        carsList.add(objCar);
        counter++;
        JOptionPane.showMessageDialog(this, "The car was added" + counter);



    }    
private void BtnPreviousActionPerformed(java.awt.event.ActionEvent evt) {                                            

        for (int i = 0; i <= carsList.size(); i++) {
            Car carTemp = carsList.get(i);
            if (counter > 0) {

                counter--;

                txtId.setText(carTemp.getId());
                JcomboBrand.setSelectedItem(carTemp.getBrand());
                SpinnerDoors.setValue(carTemp.getDoors());


            } else {
                JOptionPane.showMessageDialog(this, "There are no records");
            }
            break;
        }
    }
}

【问题讨论】:

  • 方法名称不应以大写字符开头。变量名称不应以大写字符开头。通过以下示例学习 Java 标准,不要自己编造
  • 计数器何时会大于 0?您将其初始化为 0,并有代码将其递减,但从不递增。我建议如果您想显示 ArrayList 中的先前值,则不需要循环。您只需减少“计数器”并根据新值从 ArrayList 中获取值。但在不了解应用程序如何工作的上下文的情况下,您需要自己解决细节问题。
  • 添加新代码有什么意义,却忽略了解决问题的建议?坦率地说,代码仍然没有意义。如果您将两辆汽车添加到 ArrayList,然后单击“上一个”按钮两次,然后添加另一辆汽车,会发生什么情况。根据您的逻辑,只有一辆车,因为您将计数器增加 3 次并减少两次,但是 ArrayList 上有 3 辆汽车,因为我看不到您从 ArrayList 中删除汽车的位置。所以你对“以前”的定义对我来说没有任何意义。
  • @camickr 非常感谢你的建议,我是java新手

标签: java list swing arraylist jframe


【解决方案1】:

试试下面的

private void BtnPreviousActionPerformed(ActionEvent evt) {        
    if (counter > 0) {
        counter--;
        Car carTemp = carsList.get(counter);

        txtId.setText(carTemp.getId());
        JcomboBrand.setSelectedItem(carTemp.getBrand());
        SpinnerDoors.setValue(carTemp.getDoors());
    } else {
        JOptionPane.showMessageDialog(this, "There are no records");
    }
}

【讨论】:

  • 没有注释的代码解释代码的用途不是很有帮助。您需要告诉 OP 问题是什么以及您更改代码的原因。
【解决方案2】:
break; 

break 语句导致循环在第一次迭代后终止。你的意思是把它放在 if-else 块中吗?

【讨论】:

  • 如果我去掉break,只有JOptionPane会显示来自arraylist的数据量,即:如果arraylist中有两个数据[0] [1] => "没有记录", "没有记录"。
  • 抱歉,我不太明白你想要完成什么。您是否试图让它在您按下按钮后显示列表中的前一辆车?
  • 没错,如果我不明白,请道歉
最近更新 更多