【问题标题】:Iterating through array list in Java遍历Java中的数组列表
【发布时间】:2016-03-08 04:09:38
【问题描述】:

我有一个ArrayList,它保存来自输入到JTextFields 的数据的员工记录详细信息。我已用showMessageDialog 框显示此内容,以确认它们已正确添加到列表中。

员工已正确创建并添加到列表中,但我如何一次循环浏览ArrayList 一条记录并让信息显示在JTextFields 中?

编辑如下:

我认为我没有正确地提出这个问题。我有一个按钮,可以让我向 GUI 显示我的数组列表的第一个元素的内容。见下文:

nField.setText(nameList.get(0).getName()); bField.setText(nameList.get(0).getBirth()); jField.setText(nameList.get(0).getID());

我需要的是展示下一个元素的东西。

我有一个正在尝试使用的列表迭代器,但我根本无法让它工作。

我已经尝试过了,但它导致显示最后一个元素:

for (int i = 0; i < nameList.size(); i++) {

nameList.get(i);

nField.setText(nameList.get(i).getName()); bField.setText(nameList.get(i).getBirth()); jfield.setText(nameList.get(i).getID()); }

【问题讨论】:

标签: java swing user-interface arraylist iteration


【解决方案1】:

有不同的选项,但总而言之,您必须以某种方式将您的员工记录绑定到 JTextField。一种方法是创建一个简单的对象来保存关系:

public class EmployeeRecordToJTextfield {
  private EmployeeRecord employeeRecord;
  private JTextField jTextField;

  public EmployeeRecordToJTextfield(EmployeeRecord employeeRecord, JTextField jTextField) {
    this.employeeRecord = employeeRecord;
    this.jTextField = jTextField;
  }

  public EmployeeRecord getEmployeeRecord() {
    return employeeRecord;
  }

  public JTextField getJTextField() {
    return jTextField;
  }
}

您将此类的实例粘贴到列表中,而不是 EmployeeRecord

List<EmployeeRecordToJTextfield> list = new ArrayList<>();
list.add(new EmployeeRecordToJTextfield(employeeRecord, jTextField));

当您遍历此列表时,您可以传输您选择的数据:

for (EmployeeRecordToJTextfield e : list) {
  JTextField textField = e.getJTextField();
  EmployeeRecord record = e.getEmployeeRecord();
  textField.setText(record.getName());
}

另一个可能更简单的选择是将您的列表转换为地图并将 EmployeeRecords 映射到他们的 JTextField。

基于问题更新的更新

我希望我现在明白你在问什么,但如果是这样,我会这样做:

将“当前”显示项目的索引存储在变量或隐藏的 GUI 字段中。

private int currentIndex = 0; // Start with the first item.

当您想要显示下一个项目时(可能通过下一个或上一个按钮),获取下一个值。补偿列表长度:

int nextIndex = currentIndex+1;
if (nextIndex >= nameList.size()) nextIndex = 0;
if (nextIndex < 0) nextIndex = nameList.size()-1;

现在您可以使用 nextIndex 从列表中获取正确的条目:

nField.setText(nameList.get(nextIndex).getName());
bField.setText(nameList.get(nextIndex).getBirth()); 
jfield.setText(nameList.get(nextIndex).getID());

别忘了更新 currentIndex:

this.currentIndex = nextIndex;

【讨论】:

  • 非常感谢您的回复,但我认为我的问题过于复杂了。我已经编辑了我的问题并包含了源代码。
  • @JavaNewbie 我更新了答案,这是你要找的吗?
  • 完美,谢谢里卡多。这真的很有帮助。它甚至可以追溯到最终记录之后的第一个记录。我对上一个按钮使用了相同的代码,但使用了currentIndex-1。这一直有效,直到您获得第一条记录。然后,当您尝试转到上一个记录时,它会崩溃。我错过了什么?
  • @JavaNewbie 当你在第一个元素上时,你必须添加一行来覆盖:if (nextIndex &lt; 0) nextIndex = nameList.size()-1;
  • 感激不尽。已经为此苦苦挣扎了一段时间,终于可以转向其他方面了。您是该网站的功劳。
【解决方案2】:

使用for循环:

for(JTextField a : your_list){
    do_something();
}

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 2016-10-09
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多