2017-08-01 161 views
0

我有一些像這樣的鍵值對:JFace的ComboViewer困難

1 - 鮑勃

2 - 恭

3 - 邁克爾

我已經把組合觀衆這個數據,但是當我選擇例如2-Christine時,我希望我的組合查看器只顯示關鍵字。

我爲comboviewer添加了SelectionChangedListener,但我不知道如何在選擇某些內容後更改組合框顯示的內容。

+0

使用標籤供應商 - 見的例子[這裏](http://www.vogella.com/tutorials/EclipseJFace/article.html#jface-comboviewer) –

+0

我設法讓但是,我從組合查看器的下拉列表中選擇了一個項目後,該列表消失了,我希望在該組合查看器中保留唯一的關鍵字(更精確地說:myObject.getText(),其中getText( )來自labelProvider,並且只返回鍵值對中的鍵) – GritcoAndreea

+0

您不應該看標籤提供者,僅供查看者使用。您向查看者詢問選擇內容,並將包含來自內容提供者的對象。 –

回答

0

您可以使用組合的SWT可編輯模式來實現它。當你進入SWT的只讀模式時,輸出是不可修改的。我們有一個類似的要求,唯一的區別是在顯示框&的末尾附加了一個文本,我們使用了簡單的SWT Combo。

請讓我知道它是否有幫助。 僅供參考。

package com.test; 

import java.util.HashMap; 
import java.util.Map; 
import org.eclipse.jface.viewers.ArrayContentProvider; 
import org.eclipse.jface.viewers.ComboViewer; 
import org.eclipse.jface.viewers.IBaseLabelProvider; 
import org.eclipse.jface.viewers.IContentProvider; 
import org.eclipse.jface.viewers.ILabelProvider; 
import org.eclipse.jface.viewers.ILabelProviderListener; 
import org.eclipse.jface.viewers.ISelectionChangedListener; 
import org.eclipse.jface.viewers.IStructuredContentProvider; 
import org.eclipse.jface.viewers.LabelProvider; 
import org.eclipse.jface.viewers.SelectionChangedEvent; 
import org.eclipse.jface.viewers.StructuredSelection; 
import org.eclipse.jface.viewers.Viewer; 
import org.eclipse.swt.SWT; 
import org.eclipse.swt.graphics.Image; 
import org.eclipse.swt.layout.FillLayout; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 

public class ComboViewerExample { 

public static void main(String[] args) { 
    Display display = new Display(); 

    Shell documentViewDialog = new Shell(Display.getDefault().getActiveShell(),SWT.SHELL_TRIM); 
    documentViewDialog.setLayout(new FillLayout()); 

    Map<String , String> persons = new HashMap<String, String>(); 
    persons.put("1","Bob"); 
    persons.put("2","Christine"); 
    persons.put("3","Michael"); 

    ComboViewer viewer = new ComboViewer(documentViewDialog,SWT.BORDER); 

    viewer.setContentProvider(new IStructuredContentProvider() { 

     @Override 
     public void inputChanged(Viewer paramViewer, Object paramObject1, Object paramObject2) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void dispose() { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public Object[] getElements(Object paramObject) { 

      return ((HashMap)paramObject).keySet().toArray(); 
     } 
    });  

    viewer.setLabelProvider(new LabelProvider() { 

     @Override 
     public String getText(Object element) { 
      Object obj = persons.get(element); 
      String stg = element.toString() + " " + obj; 
      return stg; 
     } 

    }); 



    viewer.setInput(persons); 

    viewer.addSelectionChangedListener(new ISelectionChangedListener() { 

     @Override 
     public void selectionChanged(SelectionChangedEvent paramSelectionChangedEvent) { 
      ((StructuredSelection)paramSelectionChangedEvent.getSelection()).getFirstElement(); 
      viewer.getCombo().setText(((StructuredSelection)paramSelectionChangedEvent.getSelection()).getFirstElement().toString()); 
     } 
    }); 

    documentViewDialog.setSize(150, 150); 
    documentViewDialog.open(); 
    while(!documentViewDialog.isDisposed()) 
    { 
     if(!display.readAndDispatch()) 
     { 
       display.sleep(); 
     } 
    } 
    display.dispose(); 
} 

}