【问题标题】:How to edit the tree viewer element based on context menu selection如何根据上下文菜单选择编辑树查看器元素
【发布时间】:2018-03-07 12:01:45
【问题描述】:

我想根据我的上下文菜单选项编辑树查看器元素。基本上我需要更新显示的元素值。如果我双击树查看器元素,我能够更新值,但通过上下文菜单我也应该能够做到。

添加上下文菜单的示例代码:

 protected def void createContextMenu(Viewer viewer) {
    val MenuManager contextMenu = new MenuManager("Menu"); // $NON-NLS-1$
    contextMenu.setRemoveAllWhenShown(true);
    contextMenu.addMenuListener(new IMenuListener() {

        public override void menuAboutToShow(IMenuManager mgr) {
                fillContextMenu(mgr);
        }
    });

    val Menu menu = contextMenu.createContextMenu(viewer.getControl());
    viewer.getControl().setMenu(menu);

}

/**
 * Fill dynamic context menu
 * 
 * @param contextMenu
 */
protected def void fillContextMenu(IMenuManager contextMenu) {
    contextMenu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));

    contextMenu.add(new Action("Rename") {

        public override void run() {
            val selectedElement = (treeViewer.selection as IStructuredSelection).firstElement
        }
    });
}

【问题讨论】:

  • 这里有什么不明白的地方?您在树中有选定的元素,您想用它做什么?你在双击监听器里做什么?
  • 嗨@greg-449:我需要编辑选择元素值。在双击操作过程中,我添加了ColumnViewerEditorActivationStrategy来监听Doubleclick事件

标签: eclipse eclipse-plugin eclipse-rcp jface


【解决方案1】:

看看这是否有帮助或让我知道其他情况

package myFolder;

import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MenuEvent;
import org.eclipse.swt.events.MenuListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TreeItem;

public class trying {

public static void main(String[] args){
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());
    shell.setSize(300,300);

    TreeViewer viewer = new TreeViewer(shell);
    viewer.getTree().setHeaderVisible(true);
    viewer.getTree().setLinesVisible(true);

    viewer.setContentProvider(new ITreeContentProvider () {

        @Override
        public void dispose() {
            // TODO Auto-generated method stub

        }

        @Override
        public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
            // TODO Auto-generated method stub

        }

        @Override
        public Object[] getChildren(Object arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public Object[] getElements(Object arg0) {
            // TODO Auto-generated method stub
            return new String[]{"Hoshe","Irani"};
        }

        @Override
        public Object getParent(Object arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public boolean hasChildren(Object arg0) {
            // TODO Auto-generated method stub
            return false;
        }


    });
    viewer.setLabelProvider(new ILabelProvider(){

        @Override
        public void addListener(ILabelProviderListener arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void dispose() {
            // TODO Auto-generated method stub

        }

        @Override
        public boolean isLabelProperty(Object arg0, String arg1) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public void removeListener(ILabelProviderListener arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public Image getImage(Object arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public String getText(Object arg0) {
            // TODO Auto-generated method stub
            return "hoshe";
        }


    });
    viewer.setInput("Hoshe");             

    Menu popupMenu = new Menu(viewer.getControl());
    MenuItem newItem = new MenuItem(popupMenu, SWT.CHECK);
    newItem.setText("New");
    MenuItem refreshItem = new MenuItem(popupMenu, SWT.CHECK);
    refreshItem.setText("Refresh");
    MenuItem deleteItem = new MenuItem(popupMenu, SWT.CHECK);
    deleteItem.setText("Delete");

    popupMenu.addMenuListener(new MenuListener() {

        @Override
        public void menuShown(MenuEvent arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void menuHidden(MenuEvent arg0) {
            // TODO Auto-generated method stub
            display.asyncExec(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub
                    TreeItem [] arr = viewer.getTree().getSelection();
                    for(MenuItem item2 : popupMenu.getItems()){
                        boolean bool1 = item2.getSelection();   
                            if(bool1){
                                arr[0].setText(item2.getText());
                                item2.setSelection(false);
                            }
                    }
                }
            });

        }
    });

    viewer.getTree().setMenu(popupMenu);
    shell.open();
    while(!shell.isDisposed()){
        if(!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多