如何使 CheckboxTableViewer 中的 SWTTable 可滚动?
How to make SWT Table in CheckboxTableViewer scrollable?
我找不到这个特殊情况的任何答案(使用 CheckboxTableViewer
),所以我希望它不是重复的。
我在 Eclipse 视图中有以下 createPartControl()
(3.x)。
我正在尝试在 GridLayout
中显示两个按钮和一个可检查的 table,如下所示
-------------------
| Button | Button |
-------------------
| Table |
-------------------
没什么了不起的。到目前为止一切都显示正常。我的 table 嵌入在 CheckboxTableViewer
中,只有一列,有时内容 (String
) 比列宽长。所以我试图使 Table
(通过 viewer.getTable()
获得,未明确构造!)可滚动以使所有内容可用。这不起作用,我不明白为什么。
我玩过 SWT
样式位(SWT.H_SCROLL
、SWT.V_SCROLL
),我试过 ScrollableComponent
,但无济于事。我无法让 ScrolledComponent
工作,因为我没有明确地构建我的 table,因此无法正确 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);
}
我知道这是临界点 "give me teh codez",但我确实找不到此设置的问题。
我回到第一个问题并以我能找到的最通用的方式re-implementing设法解决了这个问题。即:
- 我添加了一个合适的
LabelProvider
(并去掉了 ColumnLabelProvider
),
- 设置一个简单的
GridData
布局数据 object 到 table(否则没有搞砸),
- 并大大简化了
TableColumn
部分(尽管 table 中只有一列,但我仍然需要声明一个 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);
}
我找不到这个特殊情况的任何答案(使用 CheckboxTableViewer
),所以我希望它不是重复的。
我在 Eclipse 视图中有以下 createPartControl()
(3.x)。
我正在尝试在 GridLayout
中显示两个按钮和一个可检查的 table,如下所示
-------------------
| Button | Button |
-------------------
| Table |
-------------------
没什么了不起的。到目前为止一切都显示正常。我的 table 嵌入在 CheckboxTableViewer
中,只有一列,有时内容 (String
) 比列宽长。所以我试图使 Table
(通过 viewer.getTable()
获得,未明确构造!)可滚动以使所有内容可用。这不起作用,我不明白为什么。
我玩过 SWT
样式位(SWT.H_SCROLL
、SWT.V_SCROLL
),我试过 ScrollableComponent
,但无济于事。我无法让 ScrolledComponent
工作,因为我没有明确地构建我的 table,因此无法正确 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);
}
我知道这是临界点 "give me teh codez",但我确实找不到此设置的问题。
我回到第一个问题并以我能找到的最通用的方式re-implementing设法解决了这个问题。即:
- 我添加了一个合适的
LabelProvider
(并去掉了ColumnLabelProvider
), - 设置一个简单的
GridData
布局数据 object 到 table(否则没有搞砸), - 并大大简化了
TableColumn
部分(尽管 table 中只有一列,但我仍然需要声明一个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);
}