我的程序有一个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中添加一行。
答案 0 :(得分:1)
您需要创建一个StudentTableModel
(扩展AbstractTableModel
),它将为JTable提供数据,当发生某些更改时,它将触发更新(fire*
方法)。
接下来,StudentTableModel
需要知道发生了一些变化。我会使用PropertyChangeListener
。请参阅PropertyChangeSupport
以查看其使用方式。
基本上,您的StudentTableModel
会收听来自StudentManager
和每个Student
的更改,并会将更新传播到JTable
。
替代方式:
Observable
/ Observer
代替PropertyChangeListener
StudentTableModel
和StudentManager