如何在SWT表的列中添加超链接?

如何在SWT表列中添加超链接? 我正在使用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 } 

是的,这当然是可能的。 要做到这一点,你必须实现SWT.ItemPaint (也可能还有SWT.ItemEraseSWT.ItemMeassure )。

如果使用正确的LabelProvider使用TableView会更容易……

下面是使用TableView和LabelProvider绘制超链接的一种方法,如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); } } 

您需要设置编辑器的大小:

 editor.grabHorizontal = true; //or editor.minimumWidth = 50;