Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Formatting a SWT table with a single column

Tags:

java

eclipse

swt

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();
}
like image 931
Jason M. Avatar asked Oct 26 '25 16:10

Jason M.


1 Answers

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);
    }
}
like image 76
Basilevs Avatar answered Oct 29 '25 05:10

Basilevs



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!