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

时间:2011-08-08 11:48:23

标签: java eclipse 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
}

3 个答案:

答案 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.ItemEraseSWT.ItemMeassure)。

如果您使用正确的TableView ...

LabelProvider会更容易

答案 2 :(得分:0)

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

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