如何在 SWT Table 的列中添加超链接?
Posted
技术标签:
【中文标题】如何在 SWT Table 的列中添加超链接?【英文标题】:How to add Hyperlink in SWT Table`s column? 【发布时间】:2011-10-22 08:06:02 【问题描述】:如何在 SWT Table 列中添加超链接? 我正在使用 org.eclipse.swt.widgets.Table 类。
有什么方法可以在不使用 TableViewer、JFace 的情况下做到这一点?
我尝试过这种方式但不能正常工作(不显示超链接)。
for(int i=2; i<4; i++)
Hyperlink link = new Hyperlink(table, SWT.WRAP);
link.setText(temp[i]);
link.setUnderlined(true);
TableEditor editor = new TableEditor(table);
editor.setEditor(link, tableItem[index-1], i); //set hyperlinks in column i
【问题讨论】:
【参考方案1】:下面是使用带有 LabelProvider 的 TableView 绘制超链接的一种方法,如 Tonny Madsen 的回答中所述。
下面的代码只是绘制超链接。
TableViewerColumn column = ...
column.setLabelProvider( new MyHyperlinkLabelProvider( tableViewerFiles.getTable() ));
private final class MyHyperlinkLabelProvider extends StyledCellLabelProvider
MyHyperlink m_control;
private MyHyperlinkLabelProvider( Composite parent )
m_control = new MyHyperlink( parent, SWT.WRAP );
@Override
protected void paint( Event event, Object element )
String sValue = ... [Get cell value from row element]
m_control.setText( sValue );
GC gc = event.gc;
Rectangle cellRect = new Rectangle( event.x, event.y, event.width, event.height );
cellRect.width = 4000;
m_control.paintText( gc, cellRect);
private class MyHyperlink extends Hyperlink
public MyHyperlink(Composite parent, int style)
super(parent, style);
this.setUnderlined(true);
@Override
public void paintText(GC gc, Rectangle bounds)
super.paintText(gc, bounds);
【讨论】:
【参考方案2】:是的,这当然是可能的。为此,您必须实现 SWT.ItemPaint
(也可能还有 SWT.ItemErase
和 SWT.ItemMeassure
)。
如果你使用正确的LabelProvider
TableView
会更容易...
【讨论】:
【参考方案3】:你需要设置编辑器的大小:
editor.grabHorizontal = true;
//or
editor.minimumWidth = 50;
【讨论】:
以上是关于如何在 SWT Table 的列中添加超链接?的主要内容,如果未能解决你的问题,请参考以下文章
R Shiny DataTable如何防止包含超链接的列中的行选择/取消选择