0
我有一些像這樣的鍵值對:JFace的ComboViewer困難
1 - 鮑勃
2 - 恭
3 - 邁克爾
我已經把組合觀衆這個數據,但是當我選擇例如2-Christine時,我希望我的組合查看器只顯示關鍵字。
我爲comboviewer添加了SelectionChangedListener,但我不知道如何在選擇某些內容後更改組合框顯示的內容。
我有一些像這樣的鍵值對:JFace的ComboViewer困難
1 - 鮑勃
2 - 恭
3 - 邁克爾
我已經把組合觀衆這個數據,但是當我選擇例如2-Christine時,我希望我的組合查看器只顯示關鍵字。
我爲comboviewer添加了SelectionChangedListener,但我不知道如何在選擇某些內容後更改組合框顯示的內容。
您可以使用組合的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();
}
}
使用標籤供應商 - 見的例子[這裏](http://www.vogella.com/tutorials/EclipseJFace/article.html#jface-comboviewer) –
我設法讓但是,我從組合查看器的下拉列表中選擇了一個項目後,該列表消失了,我希望在該組合查看器中保留唯一的關鍵字(更精確地說:myObject.getText(),其中getText( )來自labelProvider,並且只返回鍵值對中的鍵) – GritcoAndreea
您不應該看標籤提供者,僅供查看者使用。您向查看者詢問選擇內容,並將包含來自內容提供者的對象。 –