SWT: вертикальный разделитель слишком высокий; слишком короткий горизонтальный; стол слишком узкий - PullRequest
1 голос
/ 11 февраля 2012

Я новичок в SWT, и у меня возникли некоторые проблемы с обработкой пользовательского интерфейса, чтобы выглядеть так, как я этого хочу.Рассмотрим следующий код, объединенный из фрагментов SWT:

    Display.setAppName("App Name");

    Display display = new Display();

    Shell shell = new Shell(display);
    GridLayout shellLayout = new GridLayout();
    shellLayout.numColumns = 1;
    shell.setLayout(shellLayout);

    Group group = new Group(shell, SWT.DEFAULT);
    RowLayout groupLayout = new RowLayout();
    group.setLayout(groupLayout);

    for (int i = 0; i < 3; i++)
        new Button(group, SWT.PUSH).setText("ABC" + i);

    new Label(group, SWT.SEPARATOR | SWT.VERTICAL);

    for (int i = 0; i < 3; i++)
        new Button(group, SWT.PUSH).setText("ABC" + i);

    new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);

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

    for (String title : new String[] { "A", "B", "C", "D", "E", "F", "G" })
        new TableColumn(table, SWT.NONE).setText(title);

    for (int i = 0; i < 128; i++) {
        TableItem item = new TableItem (table, SWT.NONE);
        item.setText(0, "123");
        item.setText(1, "234");
        item.setText(2, "345");
        item.setText(3, "456");
        item.setText(4, "567");
        item.setText(5, "678");
        item.setText(6, "789");
    }

    for (TableColumn column : table.getColumns())
        column.pack();

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

    while (shell.isDisposed() != true)
        if (display.readAndDispatch() != true)
            display.sleep();

    display.dispose();

При запуске полученное изображение имеет следующие проблемы:

  1. Высота вертикального разделителя примерно в два раза большекак кнопки.Верхняя строка в сетке выглядит следующим образом:
ABC1 ABC2 ABC3 | ABC1 ABC2 ABC3
               |

Я бы хотел, чтобы разделитель был только такого же высокого размера, как кнопки.

  1. Горизонтальный разделитель составляет около 1/10 ширины экрана.Как заставить его расширяться на всю ширину строки в сетке?

  2. Столбцы таблицы имеют такую ​​же ширину, как и текст, который они содержат.Это приводит к тому, что ширина таблицы составляет примерно половину ширины окна.Я бы хотел, чтобы ширина таблицы (и, соответственно, ширина столбцов) увеличивалась и уменьшалась, чтобы соответствовать ширине окна.Может ли какой-либо пункт направить меня в правильном направлении, как этого добиться?

Ответы [ 2 ]

4 голосов
/ 11 февраля 2012

Горизонтальную метку нужно указать, чтобы она занимала больше места;

Label temp = new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);
temp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

Вызов column.pack () - это то, что изменяет ширину столбца в соответствии с данными.Если вы хотите установить для них явные размеры, вам нужно установить атрибуты для ваших объектов Column, а не просто создавать их с новым Column.Для динамического изменения размера всех столбцов с помощью окна и таблицы требуется написать ResizeListener для таблицы.В противном случае столбцы, как правило, остаются неизменными независимо от размера таблицы.

1 голос
/ 14 марта 2013

Высота вертикального разделителя может быть установлена ​​с использованием данных макета.

Button button = null;
for (int i = 0; i < 3; i++) {
    button = new Button(group, SWT.PUSH);
    button.setText("ABC" + i);
}

Label verticalSeparator = new Label(group, SWT.SEPARATOR | SWT.VERTICAL);
RowData layoutData = new RowData();
layoutData.height = button.computeSize(SWT.DEFAULT, SWT.DEFAULT).y;
verticalSeparator.setLayoutData(layoutData);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...