2014-04-05 81 views
0

如何使用註釋在Java中創建JTable?我想要做這樣的事情:JTable table = new JTable(Products.class)。我可以嗎? Where Products是一個具有多個屬性的類,如:id,price,productName。帶Java註釋的JTable

+1

我會更注重從註釋創建自定義TableModel,然後使用該模型創建您的JTable。 –

+0

謝謝。我真的可以使用一些幫助。 – BigFatGoalie

+1

幫助具體什麼?您首先需要將您的大問題分解爲其組成步驟,然後嘗試單獨解決每一步。如果卡住了,那麼請回到這裏,提供一個更具體和可回答的問題。 –

回答

-1

有一個在CodeProject上的好文章和源代碼這一點: http://www.codeproject.com/Articles/36170/Simple-and-Powerfull-TableModel-with-Reflection

有沒有這樣的標註自帶的Java運行時(至少目前如此)。你可以實現你自己的方法。

定義的註釋標記您的列給定對象:

class Product { 
    @TableColumn(name="Product Name", index=0) 
    String productName; 
    .... 
} 

創建一個新的TableModel類:

你想在你的模型對象與此註釋顯示
public @interface TableColumn { 
    String name(); 
    int index(); 
} 

馬克領域 - 你可以從DefaultTableModel繼承並檢查給定對象的給定註解。

class ObjectTableModel extends DefaultTableModel { 
    private Object[] objects; 
    private String[] columns; 
    public ObjectTableModel(Object[] objects) { 
     Field[] fields = Object.class.getDeclaredFields(); 
     for (Field field : fields) { 
      if (field.isAnnotationPresent(TableColumn.class)) { 
       //Add field to the list 
      } 
     } 
    } 

    @Override 
    public Object getValueAt(int rowIndex, int columnIndex) { 
     //return the value from objects[rowIndex] with 
    } 

    @Override 
    public int getRowCount() { 
     return objects.length; 
    } 

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

    @Override 
    public String getColumnName(int column) { 
     return columns[column]; 
    } 

    @Override 
    public Class<?> getColumnClass(int columnIndex) { 
     return columnClasses[columnIndex]; 
    } 
} 
+1

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 – Compass

+0

那麼答案會太長,但讓我包括重要的一點。 – regulus