1

在我的主要 dailog 中,我有一个 JFace TableViewer。表格的最后一列是 ComboBoxCellEditor。他们可以选择“否”、“是”、“两者”。这一切都按设计工作。

但这是我的问题。

  1. 如果用户选择两者作为值。
  2. 我需要运行一个从数组中获取当前行数据的方法
  3. 将值从两者更改为否
  4. 制作数据副本,然后将值更改为是
  5. 将两者都添加回数组
  6. 刷新表

表格示例

从 -

1002 | 001   | sss   |  part | both(user changed from default)

到 -

1002 |  001  |  sss  |  part |  No

1002 |  001  |  sss  |  part | Yes

我试图弄清楚两者都被选中后如何运行该方法来完成其余的工作。我假设它必须是某种听众。请查看我的 EditingSupport 代码并告诉我从哪里开始我的方法来完成其余的工作。

public class OptionEditingSupport extends EditingSupport 
{
    private ComboBoxCellEditor cellEditor;

    public OptionEditingSupport(ColumnViewer viewer) {
        super(viewer);
        cellEditor = new ComboBoxCellEditor(((TableViewer)viewer).getTable(), new String[]{"No", "Yes", "Both"}, SWT.DROP_DOWN);
        //cellEditor.setValue(0);
    }
    protected CellEditor getCellEditor(Object element) {
        return cellEditor;
    }
    protected boolean canEdit(Object element) {
        return true;
    }
    protected Object getValue(Object element) {
        return 0;
    }
    protected void setValue(Object element, Object value) 
    {
        if((element instanceof AplotDatasetData) && (value instanceof Integer)) {
            Integer choice = (Integer)value;
            //String option = (choice == 0? "Yes":"No":"Both");
            String option = ((AplotDatasetData)element).getMarkupValue();;
            if(choice == 0) {
                option = "No";
            }    
            else if(choice == 1) {
                option = "Yes";
            }    
            else {
                option = "Both";
            }    
            ((AplotDatasetData)element).setMarkupValue(option);
            getViewer().update(element, null);
        }
    }
}  
4

1 回答 1

1

据我了解您的问题,您想复制一个对象,将其添加到您的模型中并刷新查看器。

当用户"both"在组合框中进行选择时,所有这些都应该发生。你已经知道,当这种情况发生时。你最终会在你的方法的else情况下。setValue然后你可以在那里做你必须做的事情:

protected void setValue(Object element, Object value) 
{
    if((element instanceof AplotDatasetData) && (value instanceof Integer)) {
        Integer choice = (Integer)value;

        String option = ((AplotDatasetData)element).getMarkupValue();

        if(choice == 0) {
            option = "No";
        }    
        else if(choice == 1) {
            option = "Yes";
        }    
        else {
            option = "Both";

            // create a copy of your element
            // add it to your model
            // update the viewer
        }

        getViewer().update(element, null);
    }

}
于 2012-10-12T09:31:24.180 回答