2012-09-24 17 views
5

Bunu önce söylemeliyim, bu bir Tablo hücresinin oluşturulması ile ilgili DEĞİLDİR.JTable satırında özel bir nesne nasıl ayarlanır

DB'mde User nesnesini temel alan bir 2B dizi kullanarak oluşturduğum TableModel işte burada.

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); 

Benim sorunum ben Tablo seçilen satır kullanarak, geri User nesneyi almak nasıl. Yeni bir User nesnesini oluşturamadığımı ve satır verileriyle doldurmamayı unutmayın. Sorgulanan User nesnesini almalıyım (userList'daki nesneler). Yani, bir tablo satır ile bir Nesne ayarlamak için herhangi bir yolu var mı?

İşte benim VstTableItemModel sınıfım. Örneğin bir model oluşturmadan önce User nesne kadar, modele doğrudan ekleyebilir ve modeli sizin için işi yapmak için izin Yerine yarılma

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' değiştirebiliyor musunuz? – MadProgrammer

+0

Evet. Onu buraya göndermek zorunda mıyım? – shan

+0

Hayır, sadece bunu kolaylaştırır;) – MadProgrammer

cevap

13

...

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); 
    } 

} 

Bu şekilde,

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

Şimdi ... böyle bir şey yapmak mümkün olmalıdır İhtiyacınız olduğunda, belirli bir satırda temsil eden bir kullanıcıyı yakalayabilirsiniz ...

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

Teşekkürler. Ama, onu sıralarsam ne olur? Ardından satır dizini değişecektir. öyle değil mi – shan

+0

Eğer JTable'ın sort API'sini kullanıyorsanız, sadece JTable'ı kullanabilirsiniz. convertRowIndexToModel 'görünümün ("JTable") satır dizinini model dizinine dönüştürür. – MadProgrammer

+0

Teşekkürler. İstediğim çözüm budur. tekrar teşekkürler ... – shan