2012-05-10 46 views
1

我在eclipse rcp中爲特定單元格設置下拉菜單時遇到了一些問題。 我的要求是在表格的第一行中設置下拉列表。而且該下拉列表應該也可以刪除。 該drop的另外一件事應該能夠過濾表中的內容。所以我的問題是,將下拉列表添加到表格單元格

1)是否可以將下拉列表只添加到特定的單元格或行? 2)該過濾器可以充當表格的過濾器嗎? 3)如何將下拉列表添加到表格單元格後刪除?

回答

1

是的,這是完全可能的。我建議你從閱讀Building and delivering a table editor with SWT/JFace開始,本教程包含了你需要知道的一切。作爲粗略概述,您需要使內容模型中的第一項與數據項不同 - 它將存儲過濾器值。然後在你的TableViewerColumn上設置編輯支持(這只是一個啓動器 - 這個代碼不會自己工作):

tableViewerColumn.setEditingSupport(new EditingSupport(tableViewer) 
{ 
    @Override 
    protected boolean canEdit(Object element) { 
     if(object instanceof FilterDataObject) // your model object you are using to store the filter selections 
     { 
      return true; 
     } 
    } 

    @Override 
    protected CellEditor getCellEditor(Object element) 
    {    
     final ComboBoxCellEditor editor = new ComboBoxCellEditor(table, getPossibleFilterValues(), SWT.READ_ONLY);    
     ((CCombo)editor.getControl()).addModifyListener(new ModifyListener() 
     { 
      public void modifyText(ModifyEvent e) 
      { 
       IStructuredSelection sel = (IStructuredSelection)m_tableViewer.getSelection(); 
       FilterDataObject filterValue = (FilterDataObject)sel.getFirstElement(); 
       // .. update the filter on your TableViewer 
      }    
     });    
     return editor; 
    } 

    @Override 
    protected Object getValue(Object element) 
    { 
     if(object instanceof FilterDataObject) 
     {    
      // get the filter value 
     } 
     else 
     { 
      // get your data model's value for this column 
     } 
    } 

    @Override 
    protected void setValue(Object element, Object value) 
    { 
     if(object instanceof FilterDataObject) 
     { 
      // update your FilterDataObject 
     } 
    }  
}); 
+0

好的。感謝您的寶貴信息。但是我仍然想知道,我們可以添加和刪除僅適用於列或特定行中的一個單元格的下拉菜單嗎?我也看到了你建議的這個網站。他們在那裏對所有列應用過濾器。 – Parameswaran

+0

是的,你爲表中的每一列創建一個TableViewColumn,所以可以對每一列有完全不同的編輯支持。使用'canEdit'方法來決定單元格是否顯示下拉菜單。 –

+0

通過接受答案你知道人們將來會更有可能幫助你... –

相關問題