2011-08-08 18 views
5

SWTテーブルの列にハイパーリンクを追加するには? 私はorg.eclipse.swt.widgets.Tableクラスを使用しています。SWTテーブルの列にハイパーリンクを追加するには?

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 
} 

答えて

2

はい、確かに可能です。これを行うには、SWT.ItemPaint(そしておそらくSWT.ItemEraseSWT.ItemMeassure)を実装する必要があります。

あなたは正しいLabelProvider ...

0

を使用する場合は、エディタのサイズを設定する必要があるのにそれはTableViewに簡単です:

以下
editor.grabHorizontal = true; 
//or 
editor.minimumWidth = 50; 
3

は、テーブルビューを使用してハイパーリンクを描画するための一つの方法でありますTonny Madsenの答えにあるように、LabelProviderを使用します。

下のコードは、塗料のハイパーリンクです。

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); 
    } 
} 
関連する問題