在Eclipse 3.7.0中,addSelectionListner不能与Tableviewer一起使用

时间:2014-02-17 14:27:09

标签: java eclipse eclipse-plugin eclipse-indigo

我有两个不同的功能(用于创建按钮并添加selectionListner),负责创建按钮,点击按钮后,它应该打开一个弹出窗口。

TableViewer作为参数传递的函数之一无法正常工作。按钮正在启用,但是当我点击按钮时无法弹出窗口。

以下是代码段:

工作代码:

public static Button createSubstitutionButton(Composite parent, final Callflow callflow, final Text text, final boolean multiLineText) {
    Button button = createButton(parent);
    button.addSelectionListener(new SelectionListener() {
        public void widgetSelected(SelectionEvent e) {
            String initialValue = text.getText();
            String tag = SubstitutionTagDialog.openDialog(initialValue, callflow, multiLineText);
            if (!(initialValue.equals(tag))) {              
                text.setText(tag);
            }
        }
        public void widgetDefaultSelected(SelectionEvent e) {
            widgetSelected(e);
        }           
    });
    return button;
}

不工作的代码:

public static Button createSubstitutionButton(Composite parent,  final Callflow callflow, final TableViewer tableViewer) {
    Button button = createButton(parent);
    button.addSelectionListener(new SelectionListener() {
        public void widgetSelected(SelectionEvent e) {
            int index = tableViewer.getTable().getSelectionIndex();

            boolean multiLine = false;
            String initialValue = new String();
            Object itemData = tableViewer.getTable().getItem(index).getData();
            if (itemData instanceof SettingModel) {
                SettingModel setting = (SettingModel)itemData;
                if (setting.getType() == Setting.TEXTFIELD) {
                    multiLine = true;
                    tableViewer.cancelEditing();
                }
                initialValue = ((SettingModel)itemData).getCurrentValue();
            } else if (itemData instanceof DataModel) {
                initialValue = ((DataModel)itemData).getValue();
            }

            String tag = SubstitutionTagDialog.openDialog(initialValue, callflow, multiLine);               

            if (!(initialValue.equals(tag))) {
                if (itemData instanceof SettingModel) {
                    ((SettingModel)itemData).setCurrentValue(tag);
                } else if (itemData instanceof DataModel) {
                    ((DataModel)itemData).setValue(tag);
                    tableViewer.refresh();
                }
            }
        }
        public void widgetDefaultSelected(SelectionEvent e) {
            widgetSelected(e);
        }           
    });
    return button;
}

当我们将日食从3.2.2升级到3.7.2

时,就会出现这种情况

相同的两个功能在eclipse 3.2.2中起作用

关于tableviewer或者tableviewer布局的任何更改,关于selectionListner的eclipse是否有任何变化。我们正在使用最新的3.7.0表格查看器。

我很感激快速帮助

0 个答案:

没有答案