Невозможно отобразить TableViewer внутри прокручиваемого композита

Я пытаюсь показать 2 средства просмотра таблиц и кнопки между ними. При попытке добиться TableViewer для отображения горизонтальных и вертикальных полос прокрутки я не вижу TableViewer, можно увидеть только ScrolledComposite. Я даже пытался создать композицию внутри ScrolledComposite и использовал эту композицию для отображения TableViewer, но до сих пор не вижу TableViewer. Может ли кто-нибудь указать мне в правильном направлении.

@Override
protected Control createDialogArea(Composite parent) {
    GridData gridData = new GridData(SWT.NONE, SWT.FILL, true, true);
    gridData.heightHint = 500;
    gridData.widthHint = 700;
    Composite parentComposite = new Composite(parent, SWT.NONE);
    parentComposite.setLayout(new GridLayout(3, true));
    parentComposite.setLayoutData(gridData);
    ScrolledComposite scrolledComposite_1 = new ScrolledComposite(parentComposite, SWT.H_SCROLL|SWT.V_SCROLL);
    scrolledComposite_1.setLayout(new GridLayout(1,false));
    gridData = new GridData(SWT.NONE, SWT.FILL, true, true);
    gridData.heightHint = 200;
    gridData.widthHint = 400;
    scrolledComposite_1.setLayoutData(gridData);
    scrolledComposite_1.setAlwaysShowScrollBars(true);
    TableViewer tableViewer1 = new TableViewer(scrolledComposite_1, SWT.BORDER | SWT.SINGLE);
    tableViewer1.getTable().setHeaderVisible(true);
    tableViewer1.getTable().setLayout(new GridLayout(1,false));
    tableViewer1.getTable().setLayoutData(new GridData(200,400));
    createButtonComposite(parentComposite,SWT.NONE);
    ScrolledComposite scrolledComposite_2 = new ScrolledComposite(parentComposite, SWT.H_SCROLL|SWT.V_SCROLL);
    scrolledComposite_2.setLayout(new GridLayout(1,false));
    gridData = new GridData(SWT.NONE, SWT.FILL, true, true);
    gridData.heightHint = 200;
    gridData.widthHint = 400;
    scrolledComposite_2.setLayoutData(gridData);
    scrolledComposite_2.setAlwaysShowScrollBars(true);
    TableViewer tableViewer2= new TableViewer(scrolledComposite_2, SWT.BORDER | SWT.SINGLE);
    tableViewer2.getTable().setHeaderVisible(true);
    tableViewer2.getTable().setLayoutData(new GridData(200,400));
    getShell().setText("My Dialog"); 
    return parent;
}

person Juseeth    schedule 26.02.2016    source источник


Ответы (1)


ScrolledComposite требует, чтобы вы позвонили setContents, чтобы сообщить ему о дочернем элементе управления, а также требует различных других настроек. Это работает:

scrolledComposite_1.setContent(tableViewer1.getTable());
scrolledComposite_1.setExpandVertical(true);
scrolledComposite_1.setExpandHorizontal(true);
scrolledComposite_1.setMinSize(tableViewer1.getTable().computeSize(SWT.DEFAULT, SWT.DEFAULT));

(и то же самое для 2-го)

Однако TableViewer может отображать полосы прокрутки, поэтому вам вообще не нужен ScrolledComposite:

Composite parentComposite = new Composite(parent, SWT.NONE);
parentComposite.setLayout(new GridLayout(3, true));
parentComposite.setLayoutData(gridData);

TableViewer tableViewer1 = new TableViewer(parentComposite, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL);
tableViewer1.getTable().setHeaderVisible(true);
tableViewer1.getTable().setLayout(new GridLayout(1,false));
tableViewer1.getTable().setLayoutData(new GridData(200,400));

createButtonComposite(parentComposite,SWT.NONE);

TableViewer tableViewer2= new TableViewer(parentComposite, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL);
tableViewer2.getTable().setHeaderVisible(true);
tableViewer2.getTable().setLayoutData(new GridData(200,400));
person greg-449    schedule 27.02.2016
comment
Я могу добиться того, что хочу, но теперь я использую ListViewer в SWT вместо TableViewer здесь. Есть ли способ добавить к нему прослушиватель кликов вместо DoubClickListener. - person Juseeth; 10.03.2016
comment
Это должен быть новый вопрос. - person greg-449; 10.03.2016