将数据从ArrayList中的对象获取到GUI中

时间:2016-03-19 20:31:09

标签: java user-interface arraylist

我有一个输入文件,其中有几个由空格分隔的字段,如下所示:

10 416-555-6666 Burgess 15
15 905-777-8888 Thomas 10
20 905-111-2222 Morris 5

我有一个单独的类文件'Record',它与输入文件有关,该文件有ID,电话,姓名,工作年限。

在我的main方法中,我创建了一个名为employeeList的'Record'对象的ArrayList。 ArrayList由while循环填充,该循环将读取输入文件拆分为由Record构造函数定义的类别。

我的下一个任务是创建一个可以显示和循环输入文件的GUI,但是我在设计“记录”对象在文本字段中显示的方式时遇到了麻烦。我在下面附上了一张图片,以显示我想要获得的内容:

example drawing

下一个雇员按钮将循环到ArrayList上的下一个项目,作为下一个记录对象。我已经在下面添加了我的代码,并希望了解有关下一步操作的任何建议(制作显示项目ArrayList的GUI)。

package javaapplication4;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.*;
import javax.swing.*;
import java.awt.*;

public class App {

private JFrame f;
private JPanel p;
private JButton b1;
private JLabel lab;
private JTextArea empID;
private JTextArea telephone;
private JTextArea name;
private JTextArea yearsWorked;

public App() {

    gui();

}

public static void main(String[] args) throws FileNotFoundException {



    File inputFile = new File("Emp.txt");
    Scanner in = new Scanner(inputFile);
    ArrayList<Record> employeeList = new ArrayList<Record>();

    while(in.hasNextLine()) {


        String line = in.nextLine();

        String[] peopleInfo = line.split("\\s+");

        int empId = Integer.parseInt(peopleInfo[0]);
        String telephone = peopleInfo[1];
        String name = peopleInfo[2];
        int years_of_Work = Integer.parseInt(peopleInfo[3]);

        employeeList.add(new Record(empId, telephone, name, years_of_Work));

    }

    new App();
}

  public void gui() {

    f = new JFrame("UpdateEmp");
    f.setVisible(true);
    f.setSize(600,400);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    p = new JPanel();

    b1 = new JButton("Test");
    lab = new JLabel();

    empID = JTextField();
    telephone = JTextField();
    name = JTextField();
    yearsWorked = new JTextField();


    p.add(b1);
    p.add(lab);

    f.add(p);
}

}

1 个答案:

答案 0 :(得分:0)

您需要将记录列表移动到需要访问它的类(App),而不是main方法中的局部变量。您还需要一个实例变量来记录当前记录的索引:

class App {
    private final List<Record> records = new ArrayList<>();
    private int currentRecord = 0;
    ...
}

我建议将读取记录的逻辑移动到App的方法,这样就不需要传递它了。您的main方法应该非常简单。类似的东西:

App app = new App();
app.readRecords();
app.showGui();

要显示记录,您需要使用方法来设置您创建的字段以及“下一个”和“上一个”方法。

private void showRecord() {
    assert currentRecord >= 0 && currentRecord < records.size();
    Record record = records.get(currentRecord);
    telephoneField.setText(record.getTelephone());
    ...
}

private void previous() {
    if (currentRecord > 0) {
        currentRecord--;
        showRecord();
    }
}

private void next() {
    if (currentRecord < records.size() - 1) {
        currentRecord++;
        showRecord();
    }
}