2012-05-10 245 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

通过接受答案你知道人们将来会更有可能帮助你... –

相关问题