TableViewer表格内容编辑+下拉框可编辑

        tv.setColumnProperties(new String[] { "name", "value" });//设定列的别名,新名字
        final CellEditor[] cellEditors = new CellEditor[2];
        cellEditors[0] = null;//第1列不可编辑
        cmbVariable = new VariableComboBoxCellEditor(tv.getTable(), variableNames);//重写的一个下拉框
        cellEditors[1] = cmbVariable;
        tv.setCellEditors(cellEditors);
        tv.setCellModifier(new ICellModifier() {

            @Override
            public boolean canModify(final Object element, final String property) {
                return true;
            }

            private int getIndex(final String strItem) {
                for (int i = 0; i < variableNames.length; i++) {
                    if (variableNames[i].equals(strItem)) {
                        return i;
                    }
                }
                return -1;
            }

            @Override
            public Object getValue(final Object element, final String property) {

                if (element instanceof ParameterValue) {
                    final ParameterValue p_v = (ParameterValue) element;
                    if (property.equals("value")) {
                        if (getIndex(p_v.getParameterValue()) == -1) {//如果下拉框市被编辑了,没有选择index,返回-1
                            return p_v.getParameterValue();
                        }
                        return getIndex(p_v.getParameterValue());
                    }
                }
                return null;
            }

            @Override
            public void modify(final Object element, final String property, final Object value) {
                final TableItem item = (TableItem) element;
                final ParameterValue pvNew = (ParameterValue) item.getData();
                String newValue = "";
                if (property.equals("value")) {
                    if (value instanceof String) {
                        newValue = (String) value;
                    } else {
                        newValue = variableNames[(Integer) value];
                    }
                    pvNew.setParameterValue(newValue);
                    try {
                        setTestableProperty(testable, CoreConstants.VARIABLE_ID, ApplicationUtil.serialize(input));
                    } catch (final IOException e) {
                        // TODO
                      UIPlugin.log(e.getMessage(), IStatus.ERROR);
                    }

                }
            }

        });



//重写下拉框,使之能获得被编辑的新值

// 重写下拉框,获取编辑的值
    private class VariableComboBoxCellEditor extends ComboBoxCellEditor {

        public VariableComboBoxCellEditor(final Composite parent, final String[] items) {
            super(parent, items);
        }

        @Override
        protected void doSetValue(final Object value) {
            if (value instanceof String) {
                ((CCombo) getControl()).setText((String) value);
            } else {
                super.doSetValue(value);
            }
        }

        @Override
        protected Object doGetValue() {
            final Object value = super.doGetValue();
            if (value instanceof Integer && (Integer) value == -1) {
                return ((CCombo) getControl()).getText();
            }
            return value;
        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值