2011-08-08 7 views
5

Comment ajouter un lien hypertexte dans la colonne Table SWT? J'utilise la classe org.eclipse.swt.widgets.Table.Comment ajouter un lien hypertexte dans la colonne Table SWT?

Y at-il un moyen de le faire sans utiliser TableViewer, JFace?

J'ai essayé de cette façon, mais ne fonctionne pas correctement (ne montrant pas les hyperliens).

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 
} 

Répondre

2

Oui, c'est certainement possible. Pour ce faire, vous devez mettre en œuvre SWT.ItemPaint (et éventuellement aussi SWT.ItemErase et SWT.ItemMeassure).

Il est plus facile avec TableView mais si vous utilisez le LabelProvider correct ...

0

Vous devez définir la taille de l'éditeur:

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

ci-dessous est un moyen d'attirer l'hyperlien en utilisant TableView avec un LabelProvider, comme mentionné dans la réponse de Tonny Madsen.

Le code ci-dessous juste peint l'hyperlien.

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); 
    } 
} 
Questions connexes