Изменить размер столбца таблицы, чтобы заполнить все доступное пространство - PullRequest
4 голосов
/ 09 февраля 2012

У меня есть эта таблица в Eclipse SWT с 5 столбцами.Я изменяю размер окна и вместе с этим вся таблица, но размеры столбцов не меняются, чтобы заполнить все доступное пространство.

Есть ли способ компоновки, который я могу использовать для того, чтобы изменить размер столбца для заполнениявсе доступное пространство?Я нашел некоторый код, который изменяет размер столбцов после изменения размера клиентского пространства, но для меня это небольшой взлом.

Конечно, должен быть приличный элегантный способ сделать это, используя сам макет.

Ответы [ 2 ]

5 голосов
/ 09 февраля 2012

Это может пригодиться:

Composite tableComposite = new Composite(parent, SWT.NONE);
TableViewer xslTable = new TableViewer(tableComposite, SWT.SINGLE | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
xslTable.getTable().setLinesVisible(true);
xslTable.getTable().setHeaderVisible(true);
TableViewerColumn stylesheetColumn = new TableViewerColumn(xslTable, SWT.NONE);
stylesheetColumn.getColumn().setText(COLUMN_NAMES[0]);
stylesheetColumn.getColumn().setResizable(false);
TableViewerColumn conceptColumn = new TableViewerColumn(xslTable, SWT.NONE);
conceptColumn.getColumn().setText(COLUMN_NAMES[1]);
conceptColumn.getColumn().setResizable(false);
TableColumnLayout tableLayout = new TableColumnLayout();
tableComposite.setLayout(tableLayout);

layoutTableColumns();

Метод layoutTableColumns

  /**
   * Resize table columns so the concept column is packed and the stylesheet column takes the rest of the space
   */
  private void layoutTableColumns()
  {
    // Resize the columns to fit the contents
    conceptColumn.getColumn().pack();
    stylesheetColumn.getColumn().pack();
    // Use the packed widths as the minimum widths
    int stylesheetWidth = stylesheetColumn.getColumn().getWidth();
    int conceptWidth = conceptColumn.getColumn().getWidth();
    // Set stylesheet column to fill 100% and concept column to fit 0%, but with their packed widths as minimums
    tableLayout.setColumnData(stylesheetColumn.getColumn(), new ColumnWeightData(100, stylesheetWidth));
    tableLayout.setColumnData(conceptColumn.getColumn(), new ColumnWeightData(0, conceptWidth));
  }
1 голос
/ 19 февраля 2018

Это то, что я пробовал и работает нормально.

viewer.getControl().addControlListener(new ControlListener() {

        @Override
        public void controlResized(ControlEvent arg0) {
            Rectangle rect = viewer.getTable().getClientArea();
            if(rect.width>0){
                int extraSpace=rect.width/4;
                col1.getColumn().setWidth(extraSpace);
                col2.getColumn().setWidth(extraSpace);
                col3.getColumn().setWidth(extraSpace);
                col4.getColumn().setWidth(extraSpace);
            }
        }

        @Override
        public void controlMoved(ControlEvent arg0) {
            // TODO Auto-generated method stub

        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...