Jason M.
Jason M.

Reputation: 702

Formatting a SWT table with a single column

I have the following table:

enter image description here

What I'm wanting to do is extend the column to the size of the window without displaying the extra lines where there is no column (the cells to the right of the item column). I'm somewhat familiar with most of SWT, but these tables are still confusing me.

I want to be able to select an item by clicking anywhere on the row.

Here is the simple UI code I used to make the above screen cap:

public static void main(String[] args) { 
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new GridLayout());

    Table table = new Table (shell, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
    table.setLinesVisible (true);
    table.setHeaderVisible (false);
    GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
    data.heightHint = 200;
    table.setLayoutData(data);

    TableColumn column = new TableColumn (table, SWT.NONE);
    column.setResizable(true);
    int count = 15;
    for (int i=0; i<count; i++) {
        TableItem item = new TableItem (table, SWT.NONE);
        item.setText (0, "item " + i);
    }
    column.pack();

    shell.pack();
    shell.open();

    while(!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
    display.dispose();
}

Upvotes: 4

Views: 2507

Answers (1)

Basilevs
Basilevs

Reputation: 23939

Make your Table to be the only child of its parent and create a column with following:

import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.jface.layout.TableColumnLayout;

public class ColumnHelper {
    public static void createColumn(Table table) {
        TableColumnLayout layout = new TableColumnLayout();
        table.getParent().setLayout(layout);
        TableColumn column = new TableColumn (table, SWT.NONE);
        layout.setColumnData(column, new ColumnWeightData(10));
    }
}

If you experience a strange, growing resize behaviour of table, replace TableColumnLayout with:

/** Forces table never to take more space than parent has*/
public class TableColumnLayout extends org.eclipse.jface.layout.TableColumnLayout {

    @Override
    protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
        return new Point(wHint, hHint);
    }
}

Upvotes: 5

Related Questions