2012-09-25 84 views
0

如何將超鏈接添加到SWT表?作爲TableItem添加超鏈接SWT

我需要一個普通TableItem對象作爲行的表,但有時我需要在那裏有一個超鏈接,這樣有人可以點擊它從應用程序級別打開鏈接的頁面。

有關如何實現此目的的任何提示?

+0

你使用一個簡單的'Table'或'TableViewer'? – Baz

+0

@Baz一個'Table',但如果用'TableViewer'會更容易一些,我想我可以改變它。 –

回答

0

作爲替代桑比雷迪的答案,你可以使用一個StyledCellLabelProvider(如果您切換到一個TableViewer)爲您的列,並使用一個StyledString來代表你的鏈接。當然,你將不得不自己處理鼠標事件。

下面是一個例子:

// Column for the link 
TableViewerColumn col2 = createTableViewerColumn("Link", 100, 1, viewer); 
col2.setLabelProvider(new StyledCellLabelProvider() { 
    @Override 
    public void update(ViewerCell cell) 
    { 
     Object element = cell.getElement(); 
     if(element instanceof Person) 
     { 
      Person person = (Person) cell.getElement(); 

      /* make text look like a link */ 
      StyledString text = new StyledString(); 
      StyleRange myStyledRange = new StyleRange(0, person.getLocation().length(), Display.getCurrent().getSystemColor(SWT.COLOR_BLUE), null); 
      myStyledRange.underline = true; 
      text.append(person.getLocation(), StyledString.DECORATIONS_STYLER); 
      cell.setText(text.toString()); 

      StyleRange[] range = { myStyledRange }; 
      cell.setStyleRanges(range); 

      super.update(cell); 
     } 
    } 
}); 
+0

如果桌子是垂直定向的呢?有沒有辦法做到這一行? –

+0

@MarcinKrzysiak你在使用'TableViewer'嗎?這些對象是按行還是列排列的?如果它們按行排序,則上面的示例將執行您想要的操作。 – Baz

+0

對象按列排序。每列是一個單獨的對象。我不使用'TableViewer',但如果我寫的案例是可行的,我會的。如果不是,我可能會考慮改變我的項目佈局。 –