2011-08-08 42 views
5

Cách thêm siêu kết nối trong cột bảng SWT? Tôi đang sử dụng lớp org.eclipse.swt.widgets.Table.Làm thế nào để thêm siêu liên kết trong cột của bảng SWT?

Có cách nào để thực hiện việc này mà không cần sử dụng TableViewer, JFace không?

Tôi đã thử cách này nhưng không hoạt động chính xác (không hiển thị siêu liên kết).

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 
} 

Trả lời

2

Vâng, điều đó chắc chắn có thể xảy ra. Để thực hiện việc này, bạn phải triển khai SWT.ItemPaint (và có thể cũng là SWT.ItemEraseSWT.ItemMeassure).

Nó là dễ dàng hơn với TableView tuy nhiên nếu bạn sử dụng đúng LabelProvider ...

0

Bạn cần phải thiết lập kích thước của biên tập viên:

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

Dưới đây là một cách để thu hút các siêu liên kết sử dụng TableView với một LabelProvider, như đã đề cập trong câu trả lời của Tonny Madsen.

Mã bên dưới chỉ sơn siêu liên kết.

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); 
    } 
} 
Các vấn đề liên quan