2014-09-25 62 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; 
}