Текстовое поле пропало при заполнении TableViewer - PullRequest
0 голосов
/ 06 марта 2020

Проблема возникает на Win10. Eclipse 4.13.0.

Я получил JFace TableViewer над виджетом Text в GridLayout. Всякий раз, когда я заполняю таблицу содержимым, виджет Текст исчезает. Если я настраиваю оболочку как FillLayout, она работает, но это не то, что я хочу, потому что у меня есть некоторые виджеты, не желающие захватывать пространство (например, поле поиска, разделитель и т. Д. c.).

Я не могу найти проблему, любой совет?

import java.util.ArrayList;
import java.util.List;

import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;

public class TestDialog {

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

        Label separator = new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);
        separator.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));

        Link link = new Link(shell, SWT.NONE);
        link.setText("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore");
        link.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));

        Text txtSearch = new Text(shell, SWT.BORDER | SWT.SEARCH | SWT.ICON_SEARCH | SWT.CANCEL);
        txtSearch.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
        txtSearch.setMessage("Enter search phrase here");

        TableViewer tableViewer = new TableViewer(shell, SWT.BORDER | SWT.FULL_SELECTION);
        tableViewer.setContentProvider(ArrayContentProvider.getInstance());

        Table table = tableViewer.getTable();
        table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

        Group grp = new Group(shell, SWT.NONE);
        grp.setText("MyGroup:");
        grp.setLayout(new FillLayout(SWT.HORIZONTAL));
        grp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

        Text txt = new Text(grp, SWT.WRAP);

        List<String> entries = new ArrayList<String>();
        for (int i = 0; i < 100; i++) {
            entries.add("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore");
        }

        tableViewer.setInput(entries);      

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

1 Ответ

1 голос
/ 06 марта 2020

Таблица расширяется, чтобы показать все строки, и это выталкивает из-под окна все, что находится под таблицей.

Вам необходимо указать подсказку по высоте для таблицы:

Table table = tableViewer.getTable();
GridData data = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
data.heightHint = 200;
table.setLayoutData(data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...