2011-12-21 5 views
0

私はUserNameを表示するコンボボックスを設定しようとしていますが、選択すると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

ビューアの設定はOKです。 getTag()の値が何であるかはコードからは分かりません。 –

+0

Animal ConstructorとgetTag()メソッドを追加しました – Talon06

+0

私はここに何も問題はありません。私はデバッグを提案することができます... –

答えて

0

content providerlabel providerのビューアがあります。コンテンツプロバイダはオブジェクト(UserNameIdPair)を提供し、ラベルプロバイダはラベル(UserName文字列)を提供します。 Viewのselection listenersは、コンテンツプロバイダによって提供される「送信」オブジェクトになります。

+0

新しい知見で質問を編集する。 – Talon06

関連する問題