2014-07-18 24 views
1

我必須使用ArrayList來填充JTable,但是當表格顯示時,它會填充其他內容,但填充了正確的信息。點擊下一個鏈接即可查看我的表格。由ArrayList填充的JTable,錯誤的結果

table

gui1是主類的名稱,theObject是包含的信息的結構上的表將被顯示的類的名稱。

請幫我解決這個問題!

ArrayList定義:

static ArrayList<theObject> datos = new ArrayList<theObject>(); 

這是代碼加載名爲 「DATOS」 ArrayList中:

嘗試{// --------------- --------- carga registros de proyectos ----------------------------

 contador = 0; 
     fr = new FileReader(file); 
     br = new BufferedReader(fr); 
     while ((cadena1 = br.readLine()) != null){ 

      datos1 [0] = cadena1.substring(0,8); 
      datos1 [1] = cadena1.substring(8,38); 
      datos1 [2] = cadena1.substring(38,52); 
      datos1 [3] = cadena1.substring(52,57); 
      datos1 [4] = cadena1.substring(57,62); 
      datos1 [5] = cadena1.substring(62,72); 
      datos1 [6] = cadena1.substring(72,77); 
      datos1 [7] = cadena1.substring(77,82); 
      datos1 [8] = cadena1.substring(82,89); 
      datos1 [9] = cadena1.substring(89,94); 
      datos1 [10] = cadena1.substring(94,239); 

      datos.add(new theObject(datos1)); 
      contador ++; 


     } 

     br.close(); 

    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 

桌子填充此行:

tabla = new JTable(new MyModel(datos)); 

,現在參與代碼的類:

class theObject { 
    String sap,cte,pep,dis1,dis2,norma,nvent,ntc,tmando,tparalel,equip; 

    theObject(String dato[]) { 
     this.sap = dato[0]; 
     this.cte = dato[1]; 
     this.pep = dato[2]; 
     this.dis1 = dato[3]; 
     this.dis2 = dato[4]; 
     this.norma = dato[5]; 
     this.nvent = dato[6]; 
     this.ntc = dato[7]; 
     this.tmando = dato[8]; 
     this.tparalel = dato[9]; 
     this.equip = dato[10]; 
    } 

} 

class MyModel extends AbstractTableModel { 

    private String[] columnNames = { "FERT","CLIENTE ","PEP","A","B","C","D","E","F","G","H" }; 

    ArrayList<theObject> arr1 = null; 

    MyModel(ArrayList<theObject> arr1) { 

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

    public int getRowCount() { 
     return pru2.datos.size(); 
    } 

    public Object getValueAt(int row, int col) { 

     theObject a1 = datos.get(row); 


     return a1; 
    } 
} 

在Eclipse編譯後我沒有錯誤,所以我不能確定問題

+0

我們無法調試隱形代碼。請發佈您用於生成這些結果的代碼。我立即看到的一件事就是你可能不想要像'guiObject @ 4ab60e21'這樣的東西。這只是覆蓋這些對象的'toString'方法的問題。 – csmckelvey

+0

@Aaron發佈您的代碼 – bumbumpaw

+0

對不起,我剛剛添加了一些代碼 – Aaron

回答

1

要爲每一個得到[email protected]原因單元格是因爲您要返回getValueAt()中的一個完整theObject,它應該只返回theObject字段例如,您的類看起來像下面那樣

public class TheObject { // please notice the Naming convention 
          // and follow it. Class begins with capital 
    private fert; 
    private cliente; 
    private pep; 
    // getter and setters 
} 

您在getValueAt()中的值應該只返回基於col的字段之一。例如

private String[] columnNames = { "FERT","CLIENTE ","PEP" }; 
private ArrayList<TheObject> data; 
... 
public Object getValueAt(int row, int col) { 
    Object value = null; 
    TheObject obj = data.get(row); 
    switch(col) { 
     case 0: value = obj.getFert(); break; 
     case 1: value = obj.getCliente(); break; 
     case 2: value = obj.getPep(); break; 
     default: break; 
    } 
    return value; 
} 

因此,沒有你的值僅是TheObject的領域,而不是整個TheObject對象。

+0

感謝很多peeskillet您的意見是正確的,現在mi表正在完美工作。 – Aaron