This question already has answers here:
Putting an image in to a JFace table Cell is causing gap for image to appear in first column
(3个答案)
5年前关闭。
我注意到,如果其他列中的其他单元格都包含图标,则JFace TableViewer在仅在第一列中显示文本时会遇到一些麻烦。文本出现之前的额外空间。我认为尚未发现此问题,因此可能需要一些其他配置。这是一个示例:
和简单的代码来测试:
有任何想法吗?
(3个答案)
5年前关闭。
我注意到,如果其他列中的其他单元格都包含图标,则JFace TableViewer在仅在第一列中显示文本时会遇到一些麻烦。文本出现之前的额外空间。我认为尚未发现此问题,因此可能需要一些其他配置。这是一个示例:
和简单的代码来测试:
public class IconTest {
private static class MyContentProvider implements IStructuredContentProvider {
public Object[] getElements(Object inputElement) {
return new String[] { "one", "two", "three", "four", "five", "six", "seven", "eight",
"nine", "ten" };
}
public void dispose() {
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
}
/**
* @param args
*/
public static void main(String[] args) {
final Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
TableViewer v = new TableViewer(shell, SWT.FULL_SELECTION);
v.getTable().setLinesVisible(true);
v.getTable().setHeaderVisible(true);
v.setContentProvider(new MyContentProvider());
CellLabelProvider labelProvider = new CellLabelProvider() {
public void update(ViewerCell cell) {
cell.setText(cell.getElement().toString());
}
};
CellLabelProvider labelProvider2 = new CellLabelProvider() {
public void update(ViewerCell cell) {
cell.setText(cell.getElement().toString());
cell.setImage(Display.getDefault().getSystemImage(SWT.ICON_QUESTION));
}
};
TableViewerColumn column = new TableViewerColumn(v, SWT.NONE);
column.setLabelProvider(labelProvider);
column.getColumn().setText("Column 1");
column.getColumn().setWidth(100);
TableViewerColumn column2 = new TableViewerColumn(v, SWT.NONE);
column2.setLabelProvider(labelProvider2);
column2.getColumn().setText("Column 2");
column2.getColumn().setWidth(100);
v.setInput("");
shell.setSize(400, 400);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
}
有任何想法吗?
最佳答案
这是一个长期存在的已知问题-请参阅Eclipse错误报告43910(从2004年开始!)
错误报告说底层的Windows表代码的行为是这样的,SWT / JFace对此无能为力。
您可以使用OwnerDrawLabelProvider
解决此问题,该控件可以完全控制单元格的绘制方式。 StyledCellLabelProvider
是为OwnerDrawLabelProvider
派生的,更易于使用。
09-26 15:07