gpt4 book ai didi

java - 如果某些单元格包含图标,JFace TableViewer 第一列中的文本位置无效

转载 作者:行者123 更新时间:2023-12-01 11:33:19 25 4
gpt4 key购买 nike

我注意到,如果其他列中的其他单元格包含图标,JFace TableViewer 在第一列中显示文本时会出现一些问题(仅)。文本出现之前的额外空格。我认为这个问题还没有被发现,所以可能需要一些额外的配置。这是一个示例:

What is this blank space for?

以及要测试的简单代码:

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 派生的,更易于使用。

关于java - 如果某些单元格包含图标,JFace TableViewer 第一列中的文本位置无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30244076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com