SWT: Problem mit TableViewer

Vatar

Erfahrenes Mitglied
Hallo alle zusammen

Nachdem ich schon öfters mit den Viewer gearbeitet habe dachte ich so eine Tabelle (TableViewer) ist dann ja auch kein Problem...falsch gedacht.

Aus mir unerfindlichen Gründen, ist die Spalte (columnIndex) in meinem LabelProvider immer 0 (was schon irgendwie nicht sein kann) und zusätzlich ist die Tabelle dann trotzdem komplett leer. Der ContentProvider liefert (laut Debugger) aber 2 Elemente.

Hier mal ein Ausschnitt
Java:
	protected void createFormContent(IManagedForm managedForm) {
   ...
		Composite oilClient = toolkit.createComposite(oilSection, SWT.NONE); // Die Tabelle soll in eine Section
		oilClient.setLayout(new GridLayout());
		
		Table table = createTable(oilClient);
		
		TableViewer tableViewer = new TableViewer(table, SWT.SINGLE | SWT.V_SCROLL);
		tableViewer.setUseHashlookup(true);
//		tableViewer.setColumnProperties(columnNames);
		tableViewer.setContentProvider(new TableContentProvider ());
		tableViewer.setLabelProvider(new TableLabelProvider());
		tableViewer.setInput(vehicle.getOils());
		
		
		oilSection.setClient(oilClient);
	}
	

	private Table createTable(Composite parent){
		Table table = new Table(parent, SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.HIDE_SELECTION);
		
		GridData gridData = new GridData(GridData.FILL_BOTH);
		gridData.grabExcessVerticalSpace = true;
		gridData.grabExcessHorizontalSpace = true;
		gridData.horizontalSpan = 3;
		table.setLayoutData(gridData);		
					
		table.setLinesVisible(true);
		table.setHeaderVisible(true);
		
		TableColumn column = new TableColumn(table, SWT.NONE, 0);
		column.setText("Art des Öls");
		column.setWidth(200);
		
		column = new TableColumn(table, SWT.NONE, 1);
		column.setText("Spezifikation");
		column.setWidth(150);
		
		column = new TableColumn(table, SWT.NONE, 2);
		column.setText("Liter");
		column.setWidth(50);
		
		return table;
	}
	
	
	/**
	 * 
	 *
	 */
	private class TableContentProvider implements IStructuredContentProvider {

		public Object[] getElements(Object inputElement) {
			return vehicle.getOils().toArray();
		}

		public void dispose() {
		}

		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
		}
		
	}// end (local) class

	
	/**
	 * 
	 *
	 */
	private class TableLabelProvider extends LabelProvider implements ITableLabelProvider {

		public Image getColumnImage(Object element, int columnIndex) {
			return null;
		}

		public String getColumnText(Object element, int columnIndex) {
			Oil oil = (Oil)element;
			String result = "";
			switch(columnIndex){   // der columnIndex ist immer 0?
				case 0:
					result = oil.getName();
					break;
				case 1:
					result = oil.getSpecification();
					break;
				case 2:
					result = oil.getAmount_in_liter();
					break;
			}
			return result;
		}
		
	}// end (local) class

Ich habe bereits mehrere Snippets durchgeschaut, konnte aber keinen Fehler finden.

Danke
 
Ich konnte das Problem jetzt ein wenig eingrenzen..dem Debugger seis gedankt.

Der erzeugte Table funktioniert eigentlich wunderbar, er besitzt 3 Spalten wie gewünscht und auch sonst scheint alles ok. Sobald ich diesen Table aber dem TableViewer übergeben und danach im Debugger im TableViewer den Table aufsuche sind keine Spalten mehr vorhanden?

Deswegen kommt der columnIndex im LabelProvider auch nicht über die 0 hinaus...aber verstehen tu ich's trotzdem nicht.
Java:
Table table = createTable( Behältnis );

tableViewer = new TableViewer( table, Stilkram);
Wie es hier passieren dass ich anscheinend einen anderen Table im Viewer habe als den übergebenen?

Danke
 
Zurück