遍历 Java 中的数组列表
Iterating through array list in Java
我有一个 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()); }
使用for
循环:
for(JTextField a : your_list){
do_something();
}
有不同的选项,但简而言之,您必须以某种方式将您的员工记录绑定到 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
,您将此 class 的实例粘贴在列表中:
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。
根据问题更新更新
我希望我现在明白你在问什么,但如果是的话,我会这样做:
将 'current' 显示项的索引存储在变量或隐藏的 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;
我有一个 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()); }
使用for
循环:
for(JTextField a : your_list){
do_something();
}
有不同的选项,但简而言之,您必须以某种方式将您的员工记录绑定到 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
,您将此 class 的实例粘贴在列表中:
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。
根据问题更新更新
我希望我现在明白你在问什么,但如果是的话,我会这样做:
将 'current' 显示项的索引存储在变量或隐藏的 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;