SWT: Table mit TableViewer, ContentProvider und LabelProvider

Charriu

Mitglied
Hallo Forum,
Ich habe mal wieder ein Problem, bei dem mich SWT und Java sehr ärgert. Zur IST-Situationen. Es ist ein Model vorhanden, in dem verschiedene Objekte gespeichert sind, die Oberklasse dieser Objekte ist "Category" (weitere sind Requirement, UseCase, etc...). Diese Objekte enthalten dann IDs, Namen, Beschreibungen etc.

Nun zum Problem: Obwohl das alles in den Beispielen und Tutorials funktioniert hat, passiert bei mir gar nichts. Im Model ist was drin, das zeigt er mir auch an, ebenso ist auch der Object[] mit diesem Objekt gefüllt.
Es kommt immer eine sehr undetailierte Exceptionen, die besagt "ClassNotFound" und zwar an der Stelle
Code:
viewer.setLabelProvider(new ITableLabelProvider() { ...

Der Code,sorry das es alle in einer Datei ist. Der Plan war die Swing-Applikation einfach umzuschreiben, aber das ging überhaupt nicht. Deswegen nochmal der Beginn von Anfang an zum Testen.

Code:
package gui;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TableColumn;

import com.javadude.swt.layouts.GridLayout;

import data.Category;
import data.Factory;
import data.Requirement;
import data.ServiceGoal;
import data.UseCase;

public class Test {

    private static Display display;

    private static Shell shell;
    
    private static List<Category> internalList;

    public static void main(String[] args) {
        display = new Display();
        shell = new Shell(display);
        shell.setText("TableTest");
        shell.setLayout(new GridLayout(1, 1));
        
        reTool.Globals.startup();
        UseCase uc = Factory.getInstance().createUseCase();
        uc.setId(Long.parseLong("1"));
        uc.setName("Test");
        uc.setDescription("Hallo, blalbla, lalalal");
        reTool.Globals.getModel().add(uc);

        try {
            createTable().getTable()
                    .setLayoutData(new GridData(GridData.FILL_BOTH));
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        shell.pack();
        shell.setLocation((display.getClientArea().width / 2) - 125, (display
                .getClientArea().height / 2) - 200);
        shell.setSize(450, 500);
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
        display.dispose();
    }

    public static TableViewer createTable() throws java.lang.ClassNotFoundException {
        TableLayout layout = new TableLayout();
        layout.addColumnData(new ColumnWeightData(10, 100, true));
        layout.addColumnData(new ColumnWeightData(10, 100, true));
        layout.addColumnData(new ColumnWeightData(10, 100, true));
        layout.addColumnData(new ColumnWeightData(10, 100, true));
        layout.addColumnData(new ColumnWeightData(10, 100, true));
        layout.addColumnData(new ColumnWeightData(10, 100, true));
        layout.addColumnData(new ColumnWeightData(10, 100, true));
        layout.addColumnData(new ColumnWeightData(10, 100, true));
        layout.addColumnData(new ColumnWeightData(10, 100, true));
        layout.addColumnData(new ColumnWeightData(10, 100, true));
        

        TableViewer viewer = new TableViewer(shell, SWT.FULL_SELECTION);
        viewer.getTable().setLayout(layout);
        viewer.getTable().setLinesVisible(true);
        viewer.getTable().setHeaderVisible(true);

        viewer.setContentProvider(new IStructuredContentProvider() {
            public Object[] getElements(Object input) {
                internalList = extractCategories(input);
                if (internalList.size() > 0) {
                    return internalList.toArray();
                } else {
                    return new Object[0];
                }
            }

            @Override
            public void dispose() {
                // TODO
            }

            @Override
            public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
                // TODO
            }
        });

        viewer.setLabelProvider(new ITableLabelProvider() {
            public String getColumnText(Object element, int index) {
                String result = null;
                Category category = (Category) element;
                switch (index) {
                case 0:
                    result = category.getId().toString();
                    break;
                case 1:
                    result = category.getOutline().toString();
                    break;
                case 2:
                    result = category.getName().toString();
                    break;
                }

                if (category instanceof Requirement) {
                    Requirement requirement = (Requirement) category;
                    switch (index) {
                    case 3:
                        result = requirement.getDescription();
                        break;
                    case 4:
                        result = requirement.getElementName();
                        break;
                    case 5:
                        result = requirement.getAuthor();
                        break;
                    case 6:
                        result = requirement.getModified();
                        break;
                    case 7:
                        if (requirement.getClass() == UseCase.class) {
                            UseCase tmp = (UseCase) requirement;
                            if (tmp.getTraceto() == null) {
                                result = null;
                            } else {
                                result = tmp.getTraceto().getId().toString();
                            }
                        } else if (requirement.getClass() == ServiceGoal.class) {
                            ServiceGoal tmp = (ServiceGoal) requirement;
                            if (tmp.getTraceto() == null) {
                                result = null;
                            } else {
                                result = tmp.getTraceto().getId().toString();
                            }
                        }
                        break;
                    case 8:
                        result = requirement.getStatus().toString();
                        break;
                    case 9:
                        result = requirement.getPriority().toString();
                        break;
                    }
                }

                return result;
                    
                }

            @Override
            public Image getColumnImage(Object arg0, int arg1) {
                // TODO Auto-generated method stub
                return null;
            }

            @Override
            public void addListener(ILabelProviderListener arg0) {
                // TODO Auto-generated method stub
                
            }

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

            @Override
            public boolean isLabelProperty(Object arg0, String arg1) {
                return false;
            }

            @Override
            public void removeListener(ILabelProviderListener arg0) {
                // TODO Auto-generated method stub
                
            }
        });
            
            
        
        TableColumn column1 = new TableColumn(viewer.getTable(), SWT.CENTER);
        column1.setText("A");
        TableColumn column2 = new TableColumn(viewer.getTable(), SWT.CENTER);
        column2.setText("B");
        TableColumn column3 = new TableColumn(viewer.getTable(), SWT.CENTER);
        column3.setText("C");
        TableColumn column4 = new TableColumn(viewer.getTable(), SWT.CENTER);
        column4.setText("D");
        TableColumn column5 = new TableColumn(viewer.getTable(), SWT.CENTER);
        column5.setText("E");
        TableColumn column6 = new TableColumn(viewer.getTable(), SWT.CENTER);
        column6.setText("F");
        TableColumn column7 = new TableColumn(viewer.getTable(), SWT.CENTER);
        column7.setText("G");
        TableColumn column8 = new TableColumn(viewer.getTable(), SWT.CENTER);
        column8.setText("H");
        TableColumn column9 = new TableColumn(viewer.getTable(), SWT.CENTER);
        column9.setText("I");
        TableColumn column10 = new TableColumn(viewer.getTable(), SWT.CENTER);
        column10.setText("J");
                
        viewer.setInput(reTool.Globals.getModel());
        
        return viewer;
    }
    
    private static List<Category> extractCategories(Object inputElement) {
        List<Category> resultList = new ArrayList<Category>();
        for (int i = 0; i < reTool.Globals.getModel().size(); i++) {
            resultList.add(reTool.Globals.getModel().get(i));
        }
        
        return resultList;
    }
}

Ja, es ist auf jeden Fall wichtig, dass ich das hinbekomme, sitze da jetzt schon seit gestern morgen dran und bin kein Stück weiter :-( Wäre super, wenn irgendjemand sagen könnte, wo das Problem bei dieser SWT Table ist.

Vielen Dank und viele Grüße,
Charriu
 
Hallo,
uch wenn es hier keine Antworten gab, wurde das Problem gelöst. Es lag schlicht und ergreifend daran, dass "org.eclipse.core.commands" fehlte. Als das hinzugefügt wurde lief alles.

Ciao,
Charriu
 

Neue Beiträge

Zurück