2014-09-03 2 views
2

У меня есть следующая таблица:Форматирование таблицы SWT с одной колонки

enter image description here

Что я хотел сделать, это расширить столбец размера окна без отображения дополнительных строк там, где нет столбца (ячейки справа от столбца элемента). Я немного знаком с большинством SWT, но эти таблицы все еще меня путают.

Я хочу, чтобы иметь возможность выбирать элемент, щелкнув в любом месте строки.

Вот простой код UI я использовал, чтобы сделать выше крышку экрана:

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(); 
} 
+0

Это намного проще в использовании Wi dget, который был создан для этого, как «Список». –

+0

Из контекста список может быть лучше, но этот вопрос касается таблиц. –

+0

Это справедливо. (Вы не можете использовать редакторы ячеек в 'List', я не думаю.) Я сделал что-то похожее на это с прослушивателем resize, но я помню, что это колючий. –

ответ

3

Сделайте таблицу, чтобы быть единственным ребенком своих родителей и создать колонку со следующим:

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)); 
    } 
} 

Если вы испытываете strange, growing resize behaviour таблицы, заменить TableColumnLayout с:

/** 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); 
    } 
} 
+0

[Родственный ответ] (http://stackoverflow.com/a/9211940/125562) – Basilevs

+0

Спасибо за ссылки, теперь он отлично работает! –

Смежные вопросы