如何在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
}
答案 0 :(得分:4)
下面是使用带有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);
}
}
答案 1 :(得分:2)
是的,这当然是可能的。为此,您必须实施SWT.ItemPaint
(可能还有SWT.ItemErase
和SWT.ItemMeassure
)。
如果您使用正确的TableView
...
LabelProvider
会更容易
答案 2 :(得分:0)
您需要设置编辑器的大小:
editor.grabHorizontal = true;
//or
editor.minimumWidth = 50;