Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add Hyperlink in SWT Table`s column?

Tags:

java

eclipse

swt

How to add Hyperlink in SWT Table column ? I`m using org.eclipse.swt.widgets.Table class.

Is there any way to do this without using TableViewer, JFace ?

I tried this way but not working correctly (not showing hyperlinks).

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
}
like image 355
udr1990 Avatar asked Aug 08 '11 11:08

udr1990


2 Answers

Below is one way to draw the hyperlink using TableView with a LabelProvider, as mentioned in Tonny Madsen's answer.

The code below just paints the hyperlink.

    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);
    }
}
like image 146
Andy Thomas Avatar answered Sep 30 '22 13:09

Andy Thomas


Yes, that is certainly possible. To do this you have to implement SWT.ItemPaint (and possibly also SWT.ItemErase and SWT.ItemMeassure).

It is easier with TableView though if you use the correct LabelProvider...

like image 32
Tonny Madsen Avatar answered Sep 30 '22 12:09

Tonny Madsen