在Java中将JTable与ObjectsList of Objects值同步

时间:2015-06-19 12:05:22

标签: java swing arraylist jtable

我的程序有一个JTable,显示有关学生的信息。 e.g。

Columns contain: "Name", "Surname", "Age", "Year"

我还为学生提供了一个Object课程,如下所示:

public class Student {
    private final String name;
    private final String surname;
    private final int age;
    private int year;

    public Student(String name, String surname, int age, int year) {
        this.name = name;
        this.surname = surname;
        this.age = age;
        this.year = year;
    }

    public String getName() {
        return this.name;
    }

    public String getSurname() {
        return this.surname;
    }

    public int getAge() {
        return this.age;
    }

    public int getYear() {
        return this.year;
    }

    public void setYear(int i) {
        this.year = i;
    }
}

我在下面有一个StudentManager:

public class StudentManager {
    private static ArrayList<Student> students = new ArrayList<Student>();

    public static void addStudent(Student obj) {
        this.students.add(obj);
    }

    public static void removeStudent(Student obj) {
        this.students.remove(obj);
    }

    public static Student getStudentByName(String n) {
        for(Student s : this.students) {
            if(s.getName() == n)
                return s;
        }
        return null;
    }
}

我想知道的事情:

我想要它,以便当我更改学生班级对象中的值时,JTable将使用新信息进行更新。

如果我要从ArrayList中删除Student类对象,我还希望JTable删除学生的行。

与添加学生一样,我希望它在学生姓名,姓氏,年龄和年份的JTable中添加一行。

1 个答案:

答案 0 :(得分:1)

您需要创建一个StudentTableModel(扩展AbstractTableModel),它将为JTable提供数据,当发生某些更改时,它将触发更新(fire*方法)。

接下来,StudentTableModel需要知道发生了一些变化。我会使用PropertyChangeListener。请参阅PropertyChangeSupport以查看其使用方式。

基本上,您的StudentTableModel会收听来自StudentManager和每个Student的更改,并会将更新传播到JTable

替代方式:

  • 您可以使用Observable / Observer代替PropertyChangeListener
  • 您可以合并StudentTableModelStudentManager
  • 的功能