2009-06-04 64 views
1

我使用TableViewer在表中顯示信息。用戶可以通過選擇表格的一行來選擇顯示的選項之一。顯示TableViewer不在行,但按矩陣順序

我想創建一個矩陣形式的表,其中用戶不僅可以選擇線。應該可以選擇表格的每個項目,如第2行第3列。對於每個項目選擇,將調用一個操作來處​​理該項目,就像它在TableViewer中一樣。

就我而言,我可以將CellModifier和CellEditor添加到表的行中,但操作的引用始終是行對象而不是選定的TableItem。

有人有一個例子如何在Composite中創建這樣的矩陣嗎? 我可以通過設置一個GridLayout並在for循環中添加組件來創建它,但比我遇到問題時,當我想重新繪製與新的兒童組合。 TableViewer已經有了這個處理,所以我不想再實現它。

回答

2

前段時間我遇到了同樣的問題,我發現解決這個問題的唯一方法是在與表查看器關聯的SWT表部件上註冊一個鼠標偵聽器。

MouseListener columnSelectionMouseListener = new ColumnSelectionMouseListener(); 
getViewer().getTable().addMouseListener(columnSelectionMouseListener); 

public class ColumnSelectionMouseListener implements MouseListener { 

    private TableColumn selectedColumn; 

    @Override 
    public void mouseDoubleClick(MouseEvent e) { 
     // Nothing to do here 
    } 

    @Override 
    public void mouseDown(MouseEvent e) { 
     table = (Table) e.widget; 
    TableItem item = table.getItem(new Point(e.x, e.y)); 
    for (int i = 0; i < table.getColumnCount(); i++) { 
     TableColumn column = table.getColumn(i); 
     Rectangle bounds = item.getBounds(i); 
     if (bounds.contains(e.x, e.y)) { 
      selectedColumn = column; 
     } 
    } 
    } 

    @Override 
    public void mouseUp(MouseEvent e) { 
     // Nothing to do here 
    } 

    public TableColumn getSelectedField() { 
      return selectedColumn; 
    } 
} 

然後,例如在觀衆的選擇監聽器,你可以問到鼠標監聽器,列當鼠標被按下,並結合起來,與所選擇的線路從觀衆的選擇來進行適當的選擇行動。

希望這可以幫助。

馬努