Как добавить гиперссылку в столбец таблицы SWT? - PullRequest
6 голосов
/ 08 августа 2011

Как добавить гиперссылку в столбец таблицы SWT?Я использую org.eclipse.swt.widgets.Table class.

Есть ли способ сделать это без использования 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 ]

4 голосов
/ 02 августа 2012

Ниже приведен один из способов рисования гиперссылки с использованием TableView с 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);
    }
}
2 голосов
/ 08 августа 2011

Да, это, конечно, возможно.Для этого вам нужно реализовать SWT.ItemPaint (и, возможно, также SWT.ItemErase и SWT.ItemMeassure).

Это проще с TableView, хотя, если вы используете правильные LabelProvider ...

0 голосов
/ 26 апреля 2012

Вам необходимо установить размер редактора:

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