2011-12-21 30 views
0

我想設置一個組合框,將顯示一個用戶名,但是當選擇將發送一個ID代替。如何在JFace ComboViewer中設置密鑰和值?

我已經設置了一個查詢我的Derby數據庫並返回一個包含UserNames和ID的多維數組的方法。

我做了一些研究,如何設置這個,發現了幾個帖子提示JFace,但沒有關於如何實現這一點。

我試過setData(String Key,Object Value)和add(String String,int index)。 我也看過DataBinding,但沒有找到任何能夠讓我工作的東西。

感謝,

更新---------------------- 我得到它的工作到一個點。 我認爲我已經正確設置了內容提供者,但是當我運行應用程序時,它會打印與列表中最後一項相同的所有標籤。

模型提供:

public enum ModelProvider { 
INSTANCE; 

public List<Animal> Animals; 
public String conn = "L:\\Dropbox\\Herd_Management\\database"; 
private ModelProvider() { 
    Animals = new ArrayList<Animal>(); 
    String strSQL = null; 
    strSQL = "SELECT Herd_ID FROM dbherd_management.TBLHERD"; 
    String[] straHerd_IDs = CC_Derby.getResultArray(conn, "", "", strSQL); 
    for (int r = 0; r < straHerd_IDs.length; r++) { 
     Animals.add(new Animal(Integer.parseInt(straHerd_IDs[r]))); 
    } 
} 

public List<Animal> getAnimals() { 
    return Animals; 
} 

} 

摘錄的內容和標籤提供:

  comboViewer_9 = new ComboViewer(shlHerdManagement, SWT.NONE); 
      final Combo cboAnimalTag = comboViewer_9.getCombo(); 
      cboAnimalTag.setLayoutData(new GridData(SWT.FILL, SWT.FILL, 
        true, false, 1, 1)); 
      cboAnimalTag.setText("<Select Animal Tag>"); 

      comboViewer_9.setContentProvider(new ArrayContentProvider()); 
       comboViewer_9.setInput(ModelProvider.INSTANCE.getAnimals()); 
      comboViewer_9.setLabelProvider(new LabelProvider() { 
        @Override 
        public String getText(Object element) { 
         Animal a = (Animal) element; 
         return (a.getTag()); 
        } 
       }); 

動物構造

public Animal(int intAnimal_ID) { 
    Connection conn = CC_Derby.createConnection("L:\\Dropbox\\Herd_Management\\database","",""); 
    String strSQL = "SELECT * FROM dbherd_management.TBLHERD WHERE HERD_ID =" 
      + intAnimal_ID; 

    try { 
     stmt = conn.createStatement(); 
     ResultSet results = null; 
     results = stmt.executeQuery(strSQL); 
     while (results.next()) { 
      intHerd_id = results.getInt(1); 
      strHerd_Tag_Letter = results.getString(2); 
      intHerd_Tag_Num = results.getInt(3); 
      strHerd_Tag_Color = results.getString(4); 
      strHerd_Sex = results.getString(5); 
      strHerd_Type = results.getString(6); 
      dtHerd_Birthdate = results.getString(7); 
      intHerd_Sire = results.getInt(8); 
      intHerd_Dam = results.getInt(9); 
      intHerd_Owner = results.getInt(10); 
      strHerd_TimeStamp = results.getString(11); 
      strHerd_Status = results.getString(12); 
      dtHerd_Status_Date = results.getString(13); 
     } 
     results.close(); 
     stmt.close(); 
     CC_Derby.shutdown(stmt, conn); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

getTag方法

public String getTag(){ 
    String strResult = null; 
    String l = null; 
    int n = 0; 
    String c = null; 
    l = getHerd_Tag_Letter(); 
    n = getHerd_Tag_Num(); 
    c = getHerd_Tag_Color(); 
    if(l == null){ 
     l =""; 
    } 
    if(c == null){ 
     c = ""; 
    } 
    strResult = l + n + " " + c; 
    return strResult; 
} 
+0

查看器設置看起來不錯。從代碼中不清楚'getTag()'的價值。 – 2011-12-22 06:59:59

+0

我添加了Animal Constructor和getTag()方法 – Talon06 2011-12-22 12:17:58

+0

我在這裏沒有看到任何問題,對不起。我只能建議調試... – 2011-12-22 12:30:28

回答

0

你有一個查看器content providerlabel provider。內容提供者服務對象(UserNameIdPair),標籤提供者提供標籤(UserName字符串)。視圖的selection listeners將由內容提供者提供的「發送」對象。

+0

用新發現編輯問題。 – Talon06 2011-12-22 02:47:23