Ctrl tuşa basılarak SWT ListViewer'da çok sayıda öğe seçmeye çalışıyorum. Ctrl tuşunu ve ListViewer'da basit seçimi kullanarak seçim yapmak istiyorum. Ctrl tuşunun basılıp basılmadığını görmek için bir yol bulamıyorum. Bunun için yararlı bir Dinleyici eklentisi görmüyorum. SWT ListViewer'da tuşa basma ve serbest bırakma kullanarak seçimi bilmenin bir yolu var. İşte denediğim örnek kod.Ctrl tuşunu nasıl yakalarsınız SWT ListViewer'a basın ve bırakın ListViewer
public class DummyListViewer {
private ListViewer dummyViewer;
public DummyListViewer (Composite parent) {
dummyViewer = createListViewer(parent);
}
private ListViewer createListViewer(Composite parent) {
GridData data = new GridData(SWT.LEFT, SWT.LEFT, false, false);
ScrolledComposite scrolledParent = (ScrolledComposite) createScrolledComposite(parent, SWT.NONE);
final ListViewer dummyViewer= new ListViewer(scrolledParent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL| SWT.MULTI);
dummyViewer.getList().addKeyListener(new CtrlKeyListener());
dummyViewer.setContentProvider(new ListViewerContentProvider());
dummyViewer.setLabelProvider(new ListViewerLabelProvider());
scrolledParent.setContent(dummyViewer.getControl());
scrolledParent.setMinSize(dummyViewer.getControl().computeSize(SWT.DEFAULT, SWT.DEFAULT));
dummyViewer.getControl().setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, true));
return dummyViewer;
}
private Composite createScrolledComposite(Composite parent, int style) {
ScrolledComposite scrolledComposite = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);
scrolledComposite.setLayout(new GridLayout(1, false));
GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
gridData.widthHint = 400;
gridData.heightHint = 700;
scrolledComposite.setLayoutData(gridData);
scrolledComposite.setExpandVertical(true);
scrolledComposite.setExpandHorizontal(true);
return scrolledComposite;
}
public void setInput(List<Object> input) {
filterViewer.setInput(input);
}
private class ListViewerContentProvider implements IStructuredContentProvider {
@Override
public void dispose() {
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
@Override
public Object[] getElements(Object inputElement) {
if (inputElement instanceof List) {
return ((List)inputElement).toArray();
}
return null;
}
}
private ColumnViewerFilter filter;
private class ColumnViewerFilter extends ViewerFilter {
String value=""; //$NON-NLS-1$
/**
* Constructor for ColumnViewerFilter to set the String on which
* the viewer has to be filtered on.
* @param value - String on which
* the viewer has to be filtered on.
*/
public ColumnViewerFilter(String value) {
this.value = value;
}
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
if (value != null && value instanceof String && element instanceof String) {
if (value.equals(element))
return true;
}
return false;
}
}
private class ListViewerLabelProvider extends ColumnLabelProvider {
@Override
public String getText(Object element) {
if(element instanceof String)
return (String)element;
return null;
}
}
private boolean CtrlkeyPressed = false;
private class CtrlKeyListener implements KeyListener{
@Override
public void keyPressed(KeyEvent e) {
if (e.keyCode == SWT.CTRL)
CtrlkeyPressed = true;
}
@Override
public void keyReleased(KeyEvent e) {
if (e.keyCode == SWT.CTRL)
CtrlkeyPressed = false;
}
}
}
ListViewer'da setInput yaptığınız herhangi bir yeri göremiyorum. –
Başka bir yerde DummyListViewer nesnesi oluştururken, girdiyi DummyListViewer nesnesini oluşturduktan sonra ayarlıyorum. Ama boşver, kod işe yarıyor gibi görünüyor. – Juseeth