# TableViewer, LabelProvider,TableViewerColumn



## Gast2 (23. Dez 2009)

Hallo,

ich hätte mal ein paar fragen zum TableViewer!!!

1. ich habe so versucht meine TabelleColumns die größe in prozent mit zu geben... Am Anfang klappt das aber wenn man die View größer  zieht und die Tabelle auch größer wird... dann werden die Spalten nicht größer. Wie kann man sowas machen?

```
Composite tableComposite = new Composite(parent, SWT.NONE);
		TableColumnLayout tableColumnLayout = new TableColumnLayout();
		tableComposite.setLayout(tableColumnLayout);

		TableViewer tableViewer = new TableViewer(tableComposite, SWT.BORDER
				| SWT.FULL_SELECTION | SWT.MULTI);


		TableViewerColumn viewerNameColumn = new TableViewerColumn(tableViewer,
				SWT.NONE);
		viewerNameColumn.getColumn().setText("Id");
		tableColumnLayout.setColumnData(viewerNameColumn.getColumn(), new ColumnPixelData(30));
```

2. Was ist der Unteschied wenn ich dem table viewer einen label provider setze

```
public class KundenLabelProvider extends LabelProvider implements
			ITableLabelProvider {

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

		@Override
		public String getColumnText(Object element, int columnIndex) {
			Kunde person = (Kunde) element;
			switch (columnIndex) {
			case 0:
				return person.getId();
			case 1:
				return person.getName();
			case 2:
				return String.valueOf(person.getT());
			default:
				throw new RuntimeException("Should not happen");
			}
		}
```

oder der TableViewerColumn CellLabelProvider. Welche Variante ist besser?

```
TableViewerColumn viewerNameColumn = new TableViewerColumn(tableViewer,
				SWT.NONE);
		
		// LabelProvider für jede Spalte setzen
		viewerNameColumn.setLabelProvider(new CellLabelProvider() {
			public void update(ViewerCell cell) {
				System.out.println("hier");
				cell.setText(((Kunde) cell.getElement()).getId());
			}
		});
```

3. Wie kann ich kann ich Zahlen usw. rechts darstellen lassen?


----------



## dzim (23. Dez 2009)

zu 1)
versuch mal bei "new ColumnPixelData(30,true,true)" - ich bin mir jetzt nicht sicher, ich nutzte für addTrim (das zweite true) immer eben true nd bei mir klappt es. 100%ig habe ich es nicht verstanden, aber es scheint so, als wäre das addTrim dafür zuständig, die Tabellen-Spalten anzupassen, wenn es nötig wird, oder sie nur die gegebene Größe nutzen zu lassen


```
/**
     * Creates a resizable column width of the given number of pixels.
     *
     * @param widthInPixels the width of column in pixels
     */
    public ColumnPixelData(int widthInPixels) {
        this(widthInPixels, true, false);
    }

    /**
     * Creates a column width of the given number of pixels.
     *
     * @param widthInPixels the width of column in pixels
     * @param resizable <code>true</code> if the column is resizable,
     *   and <code>false</code> if size of the column is fixed
     */
    public ColumnPixelData(int widthInPixels, boolean resizable) {
		this(widthInPixels, resizable, false);
    }

    /**
	 * Creates a column width of the given number of pixels.
	 * 
	 * @param widthInPixels
	 *            the width of column in pixels
	 * @param resizable
	 *            <code>true</code> if the column is resizable, and
	 *            <code>false</code> if size of the column is fixed
	 * @param addTrim
	 *            <code>true</code> to allocate extra width to the column to
	 *            account for trim taken by the column itself,
	 *            <code>false</code> to use the given width exactly
	 * @since 3.1
	 */
    public ColumnPixelData(int widthInPixels, boolean resizable, boolean addTrim) {
        super(resizable);
        Assert.isTrue(widthInPixels >= 0);
        this.width = widthInPixels;
		this.addTrim = addTrim;
    }
```
Schau mal da, das ist die Konstruktoren-Hierarchie...

Viel Erfolg beim ausprobieren! (und schöne Weihnachten  )

edit: deine zweite Frage kann ich dir leider nicht beantworten... Ich würde sagen: Geschmackssache - ich favorsiere einfach aus purer Gewohnheit die TableLabelProvider

edit2: drittens... keine Ahnung, aber ich schätze, das man sicher irgendwo ein Style-Bit an... Frag Wildcard ;-)


----------



## Gast2 (24. Dez 2009)

hehe danke ich hab ColumnWeightData gefunden damit kann man es prozentual und nicht in pixel angeben...
zu 2 glaub auch dass ein Style bit muss mal suchen aber hab die befürchtung dass wenn ich in TableViewerColumn SWT.RIGHT setze, dass dann die Column überschrift auch rechts ist ^^... schade eigentlich dass er es bei Zahlen nicht selber erkennt dass er die rechts darstellen soll 

Dir auch Frohe Weihnachten!!!


----------



## dzim (25. Dez 2009)

Klar, dass man da die ColumnWeightData nutzen sollte... *anDieStirnKlatsch* daran hätt' ich auch denken können! :-D

Und ab jetzt auch noch einen guten Rutsch! *g*


----------

