2014-09-25 61 views
0

我仍然在試圖理解Java編程,並會見了這個挑戰二維數組,我有一個表,並希望通過這個的DefaultTableModel創建從給定對象矢量

private Vector <Object> Headings =new Vector <Object>(); 
private Vector <Object> Data = new Vector <Object>(); 
    Headings = acquire.Account("StudentHeader"); 
    Data = acquire.Account("StudentData"); 
    Object[] ids = Headings.toArray(); 
    //Object[][] out = to2DimArray(Data); 


    DefaultTableModel model = new DefaultTableModel(out, ids); 

至於將數據加載到它要求,「出」是一個二維數組。問題是我不知道如何將我的「數據」傳輸/更改爲表所需的二維數組。我嘗試使用DefaultTableModel的Vector形式,但出現錯誤,所以我決定使用加載標題的數組形式。 你能告訴我如何將一個矢量轉換成二維數組,以便我可以加載我的表?

回答

0

您的數據對象是一個單維向量,因此您無法將其直接轉換爲二維對象。 嘗試將數據構建爲Vector<Vector<Object>>,其中每個元素都是表格的一行。

事情是這樣的:

Vector <Object> headings = new Vector <Object>();  
Vector <Vector<Object>> data = new Vector <Vector<Object>>(); 

headings = acquire.Account("StudentHeader"); 

for(int i = 0 ; i < yourStudentDataNumber ; i++) { 
    Vector <Object> dataElement = new Vector <Object>(); 
    dataElement = acquire.Account("StudentHeader"); 
    //i don't know what is acquire object, this for loop is only an example 
    // however you need to build a Vector<Object> for each row of the table 

    data.add(dataElement); 
}  

Object[] ids = headings.toArray(); 

int numberOfRow = data.size();  

Object[][] bidimArray = new Object[numberOfRow][];  

for(int i = 0 ; i < numberOfRow ; i++) { 
    bidimArray[i] = data.get(i).toArray(); 
} 

DefaultTableModel model = new DefaultTableModel(bidimArray, ids); 
+0

我嘗試了一種類似的方法,它確實有效,就像我現在要粘貼的東西,如果它要工作。讚賞。 – Jojo 2014-09-26 19:46:52

0

從邏輯上講,一個矢量是一個可調整大小的一維數組,所以我不認爲你可以將它轉換爲二維數組。

除了使用DefaultTableModel的,我想你會可以延長TableModel class或創建AbstractTableModel classanonymous class,然後創建自己的表型,然後您可以用它來實例化你的表。

檢查TableDemo.java

.....

class MyTableModel extends AbstractTableModel { 
    private String[] columnNames = {"First Name", 
            "Last Name", 
            "Sport", 
            "# of Years", 
            "Vegetarian"}; 
    private Object[][] data = { 
    {"Kathy", "Smith", 
    "Snowboarding", new Integer(5), new Boolean(false)}, 
    {"John", "Doe", 
    "Rowing", new Integer(3), new Boolean(true)}, 
    {"Sue", "Black", 
    "Knitting", new Integer(2), new Boolean(false)}, 
    {"Jane", "White", 
    "Speed reading", new Integer(20), new Boolean(true)}, 
    {"Joe", "Brown", 
    "Pool", new Integer(10), new Boolean(false)} 
    }; 

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

    public int getRowCount() { 
     return data.length; 
    } 

    public String getColumnName(int col) { 
     return columnNames[col]; 
    } 

    public Object getValueAt(int row, int col) { 
     return data[row][col]; 
    } 

    /* 
    * JTable uses this method to determine the default renderer/ 
    * editor for each cell. If we didn't implement this method, 
    * then the last column would contain text ("true"/"false"), 
    * rather than a check box. 
    */ 
    public Class getColumnClass(int c) { 
     return getValueAt(0, c).getClass(); 
    } 

......

它解釋了這個實現相當不錯。

+0

的問題是,我想補充的行和列到桌上。我不知道如何使用abstractTableModel完成此操作,但我知道如何使用DefaultTableModel來完成此操作。有沒有辦法使用Abstracttablemodel添加列和行,您可以幫助我,因爲認真使用Abstract更容易。 – Jojo 2014-09-26 19:44:28

0

好吧,這是我做的走出這一點,它的工作:

Vector <Object> Headings =new Vector <Object>(); 
Vector <Object> Data = new Vector <Object>(); 
Vector <Object> Extract = new Vector <Object>(); 
Headings = acquire.Account("IncomeHeader"); 
Data = acquire.Account("IncomeData"); 

int DataSize = Data.size(); int colum = Headings.size(); 
    int round = DataSize/colum; int cover = DataSize; int t =1; 
    while(t<=round){ 
     Extract = getVector(Data, colum); 
    model.addRow(Extract); 
    t++; 
    } 

private Vector<Object> getVector(Vector<Object> data, int colum) { 
     Vector vector = new Vector(); int h = data.size(); int r = 0; 
    while(h>s){ 
     r++; 
     vector.add(data.get(s)); 
     s++; 
    if(r==colum){ 
     System.out.println("vector: "+vector); 
     return vector; 
    } 
    } 
    return null; 
}