2012-09-24 20 views
5

में एक कस्टम ऑब्जेक्ट कैसे सेट करें मुझे इसे पहले बताना चाहिए, यह तालिका कक्ष को प्रस्तुत करने के बारे में नहीं है।एक जेटीबल पंक्ति

यहां टेबलमोडेल है कि मैं अपने डीबी में User ऑब्जेक्ट के आधार पर 2 डी सरणी का उपयोग कर निर्माण कर रहा हूं।

List<User> userList = userManagerService.getAllUsers(); 

    /* String[] col_user = {"Username", "Name", "Phone", .... } */ 
    String[][] data = new String[userList.size()][col_user.length]; 
    int i = 0; 
    for (User user : userList) { 
     String[] userdata = new String[col_user.length]; 
     userdata[0] = user.getUserUsername(); 
     userdata[1] = user.getUserName(); 
     userdata[2] = user.getUserPhone(); 
     userdata[3] = user.getUserNic(); 
     userdata[4] = user.getUserAddress(); 
     userdata[5] = user.getUserEmail(); 

     data[i++] = userdata; 
    } 

    VstTableItemModel tiModel = new VstTableItemModel(data, col_user); 
    dataTable.setModel(tiModel); 

मेरे समस्या मैं कैसे एक User वस्तु वापस प्राप्त कर सकते, टेबल में चयनित पंक्ति का उपयोग कर रहा है। ध्यान दें कि मैं एक नया User ऑब्जेक्ट नहीं बना सकता और इसे पंक्ति डेटा के साथ पॉप्युलेट कर सकता हूं। मुझे queried User ऑब्जेक्ट (userList में ऑब्जेक्ट) प्राप्त करना होगा। तो, क्या एक टेबल पंक्ति के साथ ऑब्जेक्ट सेट करने का उनका कोई तरीका है?

यहां मेरी VstTableItemModel कक्षा है।

public class VstTableItemModel extends AbstractTableModel { 

    ArrayList<Object[]> data; 
    String[] header; 

    public VstTableItemModel(Object[][] obj, String[] header) { 
     this.header = header; 
     data = new ArrayList<Object[]>(); 

     for (int i = 0; i < obj.length; ++i) { 
      data.add(obj[i]); 
     } 
    } 

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

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

    @Override 
    public Object getValueAt(int rowIndex, int columnIndex) { 
     return data.get(rowIndex)[columnIndex]; 
    } 

    @Override 
    public String getColumnName(int index) { 
     return header[index]; 
    } 

} 
+0

क्या आप 'VstTableItemModel' को संशोधित करने में सक्षम हैं? – MadProgrammer

+0

हां। क्या मुझे इसे यहां पोस्ट करने की ज़रूरत है? – shan

+0

नहीं, यह सिर्फ इसे आसान बना देगा;) – MadProgrammer

उत्तर

13
उदाहरण के लिए

User वस्तु अप इससे पहले कि आप मॉडल बनाने के लिए, यह मॉडल को सीधे जोड़ने के लिए और मॉडल आपके लिए काम करने के लिए अनुमति देते बंटवारे के बजाय ...

public class VstTableItemModel extends AbstractTableModel { 

    private List<User> users; 

    public VstTableItemModel(List<User> users) { 

     this.users = new ArrayList<User>(users); 

    } 

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

    @Override 
    public int getColumnCount() { 
     return 6; 
    } 

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

     Object value = "??"; 
     User user = users.get(rowIndex); 
     switch (columnIndex) { 
      case 0: 
       value = user.getUserUsername(); 
       break; 
      case 1: 
       value = user.getUserName(); 
       break; 
      case 2: 
       value = user.getUserPhone(); 
       break; 
      case 3: 
       value = user.getUserNic(); 
       break; 
      case 4: 
       value = user.getUserAddress(); 
       break; 
      case 5: 
       value = user.getUserEmail(); 
       break; 
     } 

     return value; 

    } 

    @Override 
    public Class<?> getColumnClass(int columnIndex) { 
     return // Return the class that best represents the column... 
    } 

    /* Override this if you want the values to be editable... 
    @Override 
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) { 
     //.... 
    } 
    */ 

    /** 
    * This will return the user at the specified row... 
    * @param row 
    * @return 
    */ 
    public User getUserAt(int row) { 
     return users.get(row); 
    } 

} 

इस तरह, आप की तरह कुछ करने के लिए सक्षम होना चाहिए ...

List<User> userList = userManagerService.getAllUsers(); 
VstTableItemModel tiModel = new VstTableItemModel(userList); 

अब जब आपको इसकी आवश्यकता होती है ... आप एक विशिष्ट पंक्ति पर प्रतिनिधित्व करने वाले उपयोगकर्ता को पकड़ सकते हैं ...

User user = tiModel.getUserAt(rowIndex); 
+0

धन्यवाद। लेकिन, अगर मैं इसे सॉर्ट करता हूं तो क्या होगा? फिर पंक्ति सूचकांक बदल जाएगा। यही है ना ? – shan

+0

यदि आप 'JTable' के प्रकार API का उपयोग कर रहे हैं, तो आप बस 'JTable' का उपयोग कर सकते हैं। दृश्य सूचकांक ('JTable') पंक्ति अनुक्रमणिका को मॉडल इंडेक्स में कनवर्ट करने के लिए कनवर्ट करें। – MadProgrammer

+0

धन्यवाद। यह वह समाधान है जो मैं चाहता हूं। धन्यवाद ... – shan

संबंधित मुद्दे