Avatar billede bris Nybegynder
31. marts 2006 - 13:56 Der er 1 løsning

Eclipse Tableviewer problem

Hejsa.

Jeg har et problem med en Tableviewer og en Table, som ikke gider at vise noget data på skærmen. Som i kan læse i det nedenstående kode, så bruger jeg en liste af objekter som input til min tableviewer, hvor jeg har min contenthandler, som giver den en liste af de objekter. Derudover har jeg en TableLableProvider, hvor jeg håndterer getColumnText(..), og returnerer de tekster den har brug for. Jeg har prøvet at steppe igennem, og det ser ud til at den bruger objekter og handler som den skal, men den viser ikke noget i tabellen.
Jeg tror virkelig jeg gør noget galt i behandling med tabellen/vieweren.. Please help :)

    private TableViewer viewer;
    private IAdapterFactory adapterFactory = new EventAdapterFactory();;
    private Table theTable;
    //private Action modifyAction;
    private EventListHolder theList;
    TableColumn column;
   
    private String[] columnNames = new String[]{"Name"};
   
   
    public EventlogView() {
        super();
    }
   
    public EventListHolder getEventList() {
        return this.theList;
    }
   
    public void createPartControl(Composite parent) {
        Platform.getAdapterManager().registerAdapters(adapterFactory, EventItem.class);
        initializeList();
       
        createTable(parent);
        createTableViewer();
        viewer.setContentProvider(new EventContentProvider());
        viewer.setLabelProvider(new EventListLabelProvider());
        viewer.setInput(theList);
        parent.layout();
        parent.redraw();
    }

    private void initializeList() {
        theList = new EventListHolder();
        EventGroup g = new EventGroup("Group 1", "1");
        for(int i = 1; i <= 10; i++) {
            theList.addEvent(new EventData(g, "Item "+i,"data for item "+i, "data for item "+i));
        }
               
    }

    public java.util.List getColumnNames() {
        return Arrays.asList(columnNames);
    }

    public void setFocus() {
        // TODO Auto-generated method stub

    }
   
    public void selectionChanged(SelectionChangedEvent event) {
        System.out.println("hejsa");
           
        }

    private void createTable(Composite parent) {
            int style = SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL |
                        SWT.FULL_SELECTION | SWT.HIDE_SELECTION;

            final int NUMBER_COLUMNS = 1;

            theTable = new Table(parent, style);
           
            GridData gridData = new GridData(GridData.FILL_BOTH);
            gridData.grabExcessVerticalSpace = true;
            gridData.horizontalSpan = 1;
            theTable.setLayoutData(gridData);       
                       
            theTable.setLinesVisible(true);
            theTable.setHeaderVisible(true);

            // 1st column with task Description
            column = new TableColumn(theTable, SWT.LEFT, 0);
            column.setText("Name");
            column.setWidth(400);
           
            // Add listener to column so tasks are sorted by description when clicked
            column.addSelectionListener(new SelectionAdapter() {
             
                public void widgetSelected(SelectionEvent e) {
                    System.out.println("Sorting on Name");
                    //viewer.setSorter(new ExampleTaskSorter(ExampleTaskSorter.DESCRIPTION));
                }
            });

        }

   
        private void createTableViewer() {

            viewer = new TableViewer(theTable,SWT.BORDER|SWT.MULTI|SWT.V_SCROLL);
            viewer.setUseHashlookup(true);
           
            viewer.setColumnProperties(columnNames);

            // Create the cell editors
            CellEditor[] editors = new CellEditor[columnNames.length];

            // Column 1 : Description (Free text)
            TextCellEditor textEditor = new TextCellEditor(theTable);
            ((Text) textEditor.getControl()).setTextLimit(60);
            editors[0] = textEditor;


            // Assign the cell editors to the viewer
            viewer.setCellEditors(editors);
            // Set the cell modifier for the viewer
            viewer.setCellModifier(new EventCellModifier(this));
            // Set the default sorter for the viewer
            //tableViewer.setSorter(new ExampleTaskSorter(ExampleTaskSorter.DESCRIPTION));
        }

        /**
        * Providing content for the Table. It implements the ITaskListViewer
        * interface since it must register changeListeners with the
        * ExampleTaskList
        */
        class EventContentProvider implements IStructuredContentProvider, IEventListViewer {
            public void inputChanged(Viewer v, Object oldInput, Object newInput) {
                if (newInput != null)
                    ((EventListHolder) newInput).addChangeListener(this);
                if (oldInput != null)
                    ((EventListHolder) oldInput).removeChangeListener(this);
            }

            public void dispose() {
                theList.removeChangeListener(this);
            }

            // Return the tasks as an array of Objects
            public Object[] getElements(Object parent) {
                return theList.getEvents().toArray();
            }

            /* (non-Javadoc)
            * @see ITaskListViewer#addTask(ExampleTask)
            */
            public void addEvent(EventItem item) {
                viewer.add(item);
            }

            /* (non-Javadoc)
            * @see ITaskListViewer#removeTask(ExampleTask)
            */
            public void removeEvent(EventItem item) {
                viewer.remove(item);           
            }

            /* (non-Javadoc)
            * @see ITaskListViewer#updateTask(ExampleTask)
            */
            public void updateEvent(EventItem item) {
                viewer.update(item, null);   
            }
        }
Avatar billede bris Nybegynder
04. april 2006 - 09:48 #1
Jeg lurede det selv. Det hele handler om, at en tableviewer har indbygget en Table selv, og man skal derfor ikke lave en Table ved siden af.. Hvordan skulle man lige vide det..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester