簡體   English   中英

SWT,TreeViewer,帶ComboBox的CellEditor

[英]SWT , TreeViewer , CellEditor with ComboBox

在TreeViewer中為treeColumn使用EditingSupport時,有什么方法可以在View中反映更改,而不是更改模型,然后使用getViewer()。update(element,null);

詳細信息:我想實現以下功能:使用| Object |顯示樹視圖 (組合框)物業| 選擇並單擊按鈕后,我想向用戶顯示更改的摘要,然后單擊確認,我要將這些更改應用於模型(對象)

我正在使用TreeViewer,在其中有一列啟用了EditingSupport的列。 每當我從ComboBox中選擇一個值,然后單擊其他位置(lostFocus類)時,該值就會設置為默認值。 我已經知道在調用SetValue()之后再次調用TreeLabelProvider(使用調試點)有什么方法可以反映視圖中的更改而不是更改模型並使用getViewer()。update(element,null );

一些FYI:包對象包含多個版本

ContentProvider完成獲取對象的工作

LabelProvider從package(String [])獲取所有版本,並顯示第一個。


//創建UI的代碼//等等

TreeViewerColumn column2 = new TreeViewerColumn(treeViewer, SWT.LEFT);
        column2.getColumn().setText("Version");
        column2.getColumn().setWidth(130);
        treeViewer.setLabelProvider(new PackageUpdateTreeLabelProvider());
        EditingSupport exampleEditingSupport = new OperationEditingSupport(
                column2.getViewer());
        column2.setEditingSupport(exampleEditingSupport);

OperationEditingSupport類

private class OperationEditingSupport extends EditingSupport {
        private ComboBoxCellEditor cellEditor = null;

        private OperationEditingSupport(ColumnViewer viewer) {
            super(viewer);

            cellEditor = new ComboBoxCellEditor(
                    ((TreeViewer) viewer).getTree(), new String[] {},
                    SWT.READ_ONLY);

        }

        @Override
        protected CellEditor getCellEditor(Object element) {
            // TODO Auto-generated method stub

            if (element instanceof IPackageInfo) {
                IPackageInfo pkg = (IPackageInfo) element;
                cellEditor.setItems(PackageMgrUtil.getInstance().getVersions(
                        (IdmPackage) pkg, false, true));
                return cellEditor;
            }
            return null;
        }

        @Override
        protected boolean canEdit(Object element) {

            return true;
        }

        @Override
        protected Object getValue(Object element) {
            // TODO Auto-generated method stub

            return 0;
        }

        @Override
        protected void setValue(Object element, Object value) {

            /* only set new value if it differs from old one */

        }


    }
***************************************************

當我單擊column2的單元格時,我會看到組合框,但是當我選擇某項並將焦點移到其他位置時,它再次顯示默認值

在調試時,我發現:它再次調用標簽Provider,該標簽將獲取包的所有版本,然后顯示第一個,因此我看不到任何更改。

我想要的是它應該保持選擇完整,而不更改基礎對象。

謝謝您的幫助。

弄清楚了。 將以下代碼添加到SetValue()方法即可解決該問題。

m_tree = (Tree)getViewer.getControl();
TreeItem[] ti = m_tree.getSelection();
            CCombo c = ((CCombo)cellEditor.getControl());
            String str = c.getItem(c.getSelectionIndex());
            ti[0].setText(1, str );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM