SWT - 在TableViewer中使用EditingSupport

时间:2012-10-11 19:49:47

标签: java swt jface tableviewer

在我的主要dailog中,我有一个JFace TableViewer。该表的最后一列是ComboBoxCellEditor。他们可以选择No,Yes,Both。这一切都按设计工作。

但这是我的问题。

  1. 如果用户为值选择Both。
  2. 我需要运行一个从Array
  3. 获取当前行数据的方法
  4. 将值从两者更改为否
  5. 复制数据,然后将值更改为是
  6. 将两者重新添加到数组
  7. 刷新表格
  8. 表示例

    从 -

    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);
            }
        }
    }  
    

1 个答案:

答案 0 :(得分: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);
    }

}