0

I have some key-value pairs like this:

1 - Bob

2 - Christine

3 - Michael

I have this data put in a combo viewer, but when I select for example 2-Christine , I want my combo viewer to show me only the key.

I added a SelectionChangedListener for the comboviewer but I don't know how to change what the combo box shows you after you selected something.

  • Use a Label Provider - see the example [here](http://www.vogella.com/tutorials/EclipseJFace/article.html#jface-comboviewer) – greg-449 Aug 01 '17 at 14:32
  • I managed to make my own label provider.But, after I selected an item from the drop-down list of the combo viewer and that list dissapeared I want in that combo viewer to remain only the key(more precisely : myObject.getText() , where getText() is from the labelProvider and returns only the key from the key-value pair) – GritcoAndreea Aug 01 '17 at 14:43
  • You shouldn't be looking at the label provider, that is just for the viewer to use. You ask the viewer for the selection and that will contain the object from your content provider. – greg-449 Aug 01 '17 at 14:46
  • Yes I got the current selection : IStructuredSelection selection = (IStructuredSelection) event.getSelection(); MyObject selectedNode = (MyObject) selection.getFirstElement(); Now, I want to tell the combo viewer that it should display only selectedNode.getKey(). That's what I am trying to do. – GritcoAndreea Aug 01 '17 at 14:49
  • Show us a [mcve] – greg-449 Aug 01 '17 at 14:54

1 Answers1

0

You can achieve it using an SWT editable mode of Combo. The moment you go in Read-Only mode of SWT the output is not modifiable. We had a similar requirement the only difference was to append a text at the end of the display box & we had used the simple SWT Combo instead.

Do let me know if it helped. For reference.

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

}