如何使CheckboxTableViewer中的SWT表可滚动?

时间:2015-02-13 11:10:54

标签: java swt jface

我找不到这个特殊情况的答案(使用CheckboxTableViewer),所以我希望它不是重复的。

我在Eclipse视图(3.x)中有以下createPartControl()

我正在尝试在GridLayout中显示两个按钮和一张可检查表格,如下所示

-------------------
| Button | Button |
-------------------
|      Table      |
-------------------

没什么了不起的。到目前为止,一切都很好。我的表嵌入在CheckboxTableViewer中,只有一列,有时内容(String)比列宽更长。所以我试图使Table(通过viewer.getTable()得到,而不是显式构造!)可滚动以使所有内容可用。这不起作用,我不明白为什么。

我玩过SWT样式位(SWT.H_SCROLLSWT.V_SCROLL),我尝试了ScrollableComponent,但无济于事。我无法让ScrolledComponent工作,因为我没有明确地构建我的表,因此无法正确setContents()

以下是我createPartControl()的要点。

public void createPartControl(Composite parent) {
    parent.setLayout(new GridLayout(2, false));

    addSelectionButtons(parent); // Works

    myTableViewer = CheckboxTableViewer.newCheckList(parent, SWT.BORDER);
    myTableViewer.getTable().setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));

    Table myTable = (Table) myTableViewer.getControl();
    TableLayout tableLayout = new TableLayout();
    tableLayout.addColumnData(new ColumnWeightData(100, 50, true));
    myTable.setLayout(tableLayout);

    myTableViewer.setContentProvider(new MyContentProvider());

    TableViewerColumn viewerCol = new TableViewerColumn(myTableViewer, SWT.LEFT);
    TableColumn col = viewerCol.getColumn();
    col.setText("My column");
    viewerCol.setLabelProvider(new ColumnLabelProvider() {
        @Override
        public String getText(Object element) {
            return text; // Dummy var
        }
    });

    myTableViewer.setInput(getInput()); // Gets model
    myTableViewer.getTable().setHeaderVisible(true);
    myTableViewer.getTable().setLinesVisible(true);
}

我知道这是边缘“给我teh codez”,但我真的找不到这个设置的问题。

1 个答案:

答案 0 :(得分:0)

我已经设法通过回到原点并以我能找到的最通用的方式重新实现来解决这个问题。即:

  • 我添加了一个合适的LabelProvider(并摆脱了ColumnLabelProvider),
  • 将一个简单的GridData布局数据对象设置为表格(否则没有弄乱它),
  • 并简化了TableColumn部分(尽管表中只有一列,但仍需要声明TableColumn以设置列标题)。 注意: TableColumn必须为pack(),否则内容不会显示。从TableColumn API:“使接收器的大小调整为其首选大小。

简单而有效。

public void createPartControl(Composite parent) {
  parent.setLayout(new GridLayout(1, true));

  addSelectionButtons(parent); // Adds select/deselect all buttons

  myTableViewer = CheckboxTableViewer.newCheckList(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
  myTableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
  myTableViewer.setContentProvider(new MyContentProvider());
  myTableViewer.setLabelProvider(new MyLabelProvider());
  myTableViewer.setInput(getInput()); // Gets model

  TableColumn column = new TableColumn(myTableViewer.getTable(), SWT.FILL);
  column.setText("My column");
  column.pack();

  myTableViewer.getTable().setHeaderVisible(true);
  myTableViewer.getTable().setLinesVisible(true);
}