2015-07-20 82 views
-1

我有叫學生在這個對象,我有對象的ArrayList中包含的材料(姓名,註釋)如何以顯示包含一個又一個的ArrayList在JTable中有一個TableModel創建一個ArrayList的

Public Class Student{ 
private String StudentFirstName; 
private String StudentLastName; 
private List<Material> materials; 

} 
public Class Material{ 
String String materialName; 
String Float note; 

} 

的對象我想在JTable中顯示所有數據,這樣的:

StudentFirstName:傑克StudentLastName:杜邦materialName:數學注:15 StudentFirst名稱:傑克StudentLastName:杜邦materialName:法語注意:12 StudentFirstName:傑克StudentLastName:杜邦materialName:數學注:15 StudentFirstName:傑克StudentLastName:杜邦materialName :體育筆記:10

學生名字:peter StudentLastName:桑切斯materialName:數學注:14 StudentFirstName:彼得StudentLastName:桑切斯materialName:法語注意:17 StudentFirstName:彼得StudentLastName:桑切斯materialName:阿拉伯語注: 11

這是我的表模型

package com.orange.tableModel; 
public class DataTableModel extends AbstractTableModel { 
String[] entete = {"StudentFisrtName", "StudentLastNameName", 
"Mat erialName", "MaterialNote"}; 
List<Student> allStudents; 
public DataTableModel() { 
allStudents = new ArrayList<>(); 

} 

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

} 

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

@Override 
public Object getValueAt(int rowIndex, int columnIndex) { 

    switch (columnIndex) { 
     case 0: { 
      return allStudents.get(rowIndex).getStudentFirstName(); 

     } 
     case 1: { 
      return allStudents.get(rowIndex).getStudentLastName(); 

     } 
     case 2: { 

      return allStudents.get(rowIndex).materials(rowIndex).getMaterialName(); 
     } 
     case 3: { 
      return allStudents.get(rowIndex).materials(rowIndex).getNote(); 
     } 

     default: 
      throw new IllegalArgumentException(); 
    } 

} 

@Override 
public String getColumnName(int column) { 

    return entete[column]; 
} 

}

Jtable dataTable=new Jtable(); 
dataTable.setModel(new DataTableModel());  ` 

所以結果是:

StudentFirstName:傑克StudentLastName:杜邦materialName:數學注:15

StudentFirstName:彼得StudentLastName:sanche žmaterialName:數學注:14

回答

0

我會做這樣的事情:

首先,該方法getRowCount()

returns allStudents.size() 

,實際上這個值是二,所以你告訴你的DataTableModel你的表包含2行,這是不正確的。 嘗試修改這個方法做這樣的事情:

@Override 
public int getRowCount() { 
    int row_count=0; 
    for (int i=0; i<allStudents.size(); i++) { 
    row_cont+=allStudents.get(i).getMaterials().size(); 
} 
這樣

,你會強制JTable中有多少行需要。接下來,你應該寫一個更智能的方法getValueAt。你應該保持,告訴你多少行致力於同一個學生,做了一個控制變量(例如count_row),例如

if (count_row< allStudents.get(rowIndex).getMaterials().size()) { 
    //show information of the same Student but with materials(count_row) 
} 

或這樣的事情。簡而言之,您告訴您的jTable顯示相同的學生,直到顯示每個材質。

可以解決以下另一種方式這個問題:你應該創建冗餘數據的ArrayList,例如做這樣的事情

Student A_B=new Student("A","B","Math",12); //first_name, last_name, subject, note 
Student A_B=new Student("A","B","History",4); 
Student B_C=new Student("B","C","Geograph",10); 

希望這可以給你一個有用的技巧。嗨!

+0

thx爲您的答案我會測試你的第一個解決方案:) 第二我做到這一點之前,我問了這個問題我混合了兩個對象:D和它的工作,但我不明白,我想更好地模型化和按照我的班級示意圖@ user2896152 – user3299124

+0

好的......讓我知道:) – user2896152

相關問題