2013-04-10 63 views
0

所以,我目前正在爲我的程序構建GUI。我使用帶有自定義AbstractTableModel的JTable來填充我的不同LinkedLists的內容。 但是,如果我將一個JTable添加到我的GUI類,並在那裏初始化LinkedList類,那麼這不是我需要的LinkedList。我需要LinkedList Studentlist,它存儲在我的Database類中。我如何告訴桌子? 我無法真正顯示任何GUI代碼,因爲它仍然在製作中,而我現在只是在測試一些東西。從JTable的另一個類傳遞LinkedList。自動更新表

我的另一個問題是,這是我的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; 
    } 
} 

}

我需要什麼添加到代碼,以使表自動更新,當學生被添加到列表中?

在此先感謝。

回答

1

在最低限度,

  • 如圖所示here,你執行setValueAt()必須觸發一個事件適當到您的更新。

  • 如果您公開的方法發生變異data,它也必須觸發一個適當的事件。

在這方面,適當裝置AbstractTableModel繼承fireXxx()方法之一。

1

我是否需要在代碼中添加任何內容以使學生在添加到列表時自動更新 ?

TableModel中創建一個方法,這樣當添加學生時,將Student對象傳遞給列表並將其添加到列表中。由於您正在使用AbstractTableModel,因此您需要在數據更改後觸發適當的事件。

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

如果我添加一個JTable我的GUI類,並初始化LinkedList類 存在,那麼這是不是我需要的LinkedList的。我需要 LinkedList Studentlist,它存儲在我的Database類中。

在創建表模型時,查詢StudentList並將該列表發送到表模型構造函數。

相關問題