0

所以,我目前正在为我的程序构建 GUI。我正在使用带有自定义 AbstractTableModel 的 JTable 来用我的不同 LinkedLists 的内容填充它们。但是,如果我将 JTable 添加到我的 GUI 类,并在那里初始化 LinkedList 类,那么这不是我需要的 LinkedList。我需要存储在我的数据库类中的 LinkedList Studentlist。我怎么告诉桌子?我不能真正显示任何 GUI 代码,因为它仍在制作中,我现在只是在测试。

我的另一个问题是,这是我的 AbstractTableModel:

public class StudentTableModel extends AbstractTableModel {

public static final String[] columnNames = { "ID", "First Name",
        "Last Name" };
private LinkedList<Student> data;

public StudentTableModel(LinkedList<Student> data) {
    this.data = data;
}

@Override
public int getColumnCount() {
    return columnNames.length;
}

@Override
public String getColumnName(int column) {
    return columnNames[column];
}

@Override
public int getRowCount() {
    return data.size();
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
    Student student = data.get(rowIndex);
    if (student == null) {
        return null;
    }
    switch (columnIndex) {
    case 0:
        return student.getID();
    case 1:
        return student.getFirstname();
    case 2:
        return student.getLastname();
    default:
        return null;
    }
}

}

当学生添加到列表中时,我是否需要在代码中添加任何内容以使表格自动更新?

提前致谢。

4

2 回答 2

1

当学生添加到列表中时,我是否需要在代码中添加任何内容以使表格自动更新?

创建一个方法,TableModel以便在添加 Student 时将 Student 对象传递给列表并将其添加到列表中。由于您正在使用,因此AbstractTableModel您需要在数据更改后触发适当的事件。

private void addStudent(Student student) {
    data.add(student);
    fireTableDataChanged();
}

如果我将 JTable 添加到我的 GUI 类,并在那里初始化 LinkedList 类,那么这不是我需要的 LinkedList。我需要存储在我的数据库类中的 LinkedList Studentlist。

在创建表模型时,查询 StudentList 并将该列表发送到表模型构造函数。

于 2013-04-10T10:08:39.423 回答
1

最低限度,

  • 如此处所示,您的实现setValueAt()必须触发适合您的更新的事件。

  • 如果您将公共方法公开给 mutate data,它也必须触发适当的事件。

在这种情况下,适当的意思是fireXxx()继承自的方法之一AbstractTableModel

于 2013-04-10T09:59:58.843 回答