Как создать таблицу Java SWT с несколькими столбцами без указания статической ширины столбца - PullRequest
1 голос
/ 09 июня 2019

В настоящее время я разрабатываю плагин eclipse, и в этом плагине есть вид формы в качестве шаблона дизайна. В этом виде формы я добавил таблицу, и там должно быть два столбца с соотношением ширины 1: 2. А также я хочу, чтобы эта таблица была адаптивной и динамически изменяла ширину столбца в соответствии с шириной страницы formView.

Следующий сегмент кода - это тот, который я сейчас использую.

        Table table = new Table(parent, SWT.MULTI | SWT.H_SCROLL | SWT.BORDER);
        fd = new FormData();
        fd.height = 200;
        fd.top = new FormAttachment(removeTestCaseButton, 5);
        fd.left = new FormAttachment(1);
        fd.right = new FormAttachment(99);
        table.setLayoutData(fd);
        table.setLinesVisible(true);
        table.setHeaderVisible(true);

        TableColumn column1 = new TableColumn(testCaseTable, SWT.CENTER);
        column.setText("column One");

        TableColumn column2 = new TableColumn(testCaseTable, SWT.CENTER);
        column2.setText("column Two");

        form.addControlListener(new ControlAdapter() {
            public void controlResized(ControlEvent e) {
                Rectangle area = form.getBody().getClientArea();
                int width = area.width;         
                column1.setWidth(width / 3);
                column1.setWidth(width * 2 / 3);
            }
        });

Но здесь проблема в том, что когда я открываю FormView, он работает нормально. Но мой столик внутри секции . После того, как я разверну или сверну Раздел, ширина таблицы увеличивается с появлением горизонтальной полосы прокрутки.

Я просто хочу твердое решение для этого.

1 Ответ

1 голос
/ 09 июня 2019

Это гораздо проще сделать с помощью JFace TableViewer с TableColumnLayout и ColumnWeightData, но вам придется переработать код, чтобы использовать контент и метки JFace для таблицы.

TableColumnLayout tableLayout = new TableColumnLayout();

// A separate composite containing just the table viewer is required
Composite tableComp = new Composite(parent, SWT.NONE);

tableComp.setLayout(tableLayout);

TableViewer viewer = new TableViewer(tableComp, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER);

TableViewerColumn col1 = new TableViewerColumn(viewer, SWT.LEAD);
col1.getColumn().setText("Column 1");

col1.setLabelProvider(.... label provider for column 1 ....);

// Weight for column
tableLayout.setColumnData(col1.getColumn(), new ColumnWeightData(60));

TableViewerColumn col2 = new TableViewerColumn(viewer, SWT.LEAD);
col2.getColumn().setText("Column 2");

col2.setLabelProvider(....... label provider for column 2 .....);

// Weight for column
tableLayout.setColumnData(col2.getColumn(), new ColumnWeightData(40));

viewer.getTable().setHeaderVisible(true);
viewer.getTable().setLinesVisible(true);

viewer.setContentProvider(ArrayContentProvider.getInstance());

viewer.setInput(.... input data for the viewer ....);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...