【发布时间】:2016-08-10 15:16:25
【问题描述】:
我目前正在使用 SWT TableViewer。我给它一个StyledCellLabelProvider 实现。我给了它一组输入,它显示得很好。有一个用例,用户可以从表中选择行来执行某些操作,然后需要将图标添加到已完成修改的每一行的特定单元格中。
我在这里遇到的问题是图像没有显示,除非我在执行修改后在 tableviewer 中物理单击。请注意,在执行修改后,tableviewer 的选择保持不变。我知道 StyledCellLabelProvider 中的更新是在我在 tableviewer 上调用 refresh 后调用的。
我的问题是为什么不点击就显示不出来?
MyStyledCellLabelProvider
public void update(ViewerCell cell) {
if (cell.getElement() instanceof Foo && ((Foo)cell.getElement()).hasBeenModified()) {
cell.setImage(myImage);
}
cell.setText("ABCD");
}
TableViewerComposite
@Override
public void notifyModificationMade(Object[] modifiedObjects){
//Update input on tableviewer
...
//Refresh after updating
tableViewer.refresh(); //Triggers the StyledCellLabelProvider to be called
}
再次感谢!
编辑:
所以我忘记的一条信息是,正在更新的单元格有时会在其中包含 org.eclipse.ui.forms.widgets.Hyperlink 而不是文本,并且在添加图像后将继续拥有它。我认为这是导致问题的原因。当我删除超链接代码并返回文本时,它按预期工作。这是我用来将HyperLink 添加到单元格的代码。
public void update(ViewerCell cell) {
if (cell.getElement() instanceof Foo && ((Foo)cell.getElement()).hasBeenModified()) {
cell.setImage(myImage);
final Hyperlink link = new Hyperlink((Composite) cell.getViewerRow().getControl(),
SWT.UNDERLINE_LINK);
link.setUnderlined(true);
link.setBackground(link.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
link.setForeground(link.getDisplay().getSystemColor(SWT.COLOR_BLUE));
link.setText("My url");
link.setHref(url);
link.addHyperlinkListener(new HyperlinkAdapter() {
...
});
TableItem item = (TableItem) cell.getItem();
TableEditor editor = new TableEditor(item.getParent());
editor.grabHorizontal = true;
editor.grabVertical = true;
editor.setEditor(link, item, cell.getColumnIndex());
editor.layout();
}
}
【问题讨论】:
标签: java swt jface tableviewer