Java 将右键单击菜单添加到SWT树中的树项

Java 将右键单击菜单添加到SWT树中的树项,java,eclipse,swt,Java,Eclipse,Swt,如何将右键单击弹出菜单添加到SWT树中的树项。每个treeeItem都应该启用右键单击功能只需使用tree.setMenu(Menu) 好了: public static void main(String[] args) { Display display = Display.getDefault(); final Shell shell = new Shell(display); shell.setText("StackOverflow"); shell.set

如何将右键单击弹出菜单添加到SWT树中的树项。每个treeeItem都应该启用右键单击功能

只需使用
tree.setMenu(Menu)

好了:

public static void main(String[] args)
{
    Display display = Display.getDefault();
    final Shell shell = new Shell(display);
    shell.setText("StackOverflow");
    shell.setLayout(new FillLayout());

    final Tree tree = new Tree(shell, SWT.NONE);

    for(int i = 0; i < 10; i++)
    {
        TreeItem item = new TreeItem(tree, SWT.NONE);
        item.setText("Parent " + i);

        for(int j = 0; j < 3; j++)
        {
            TreeItem child = new TreeItem(item, SWT.NONE);
            child.setText("Child " + i + " " + j);
        }
    }

    final Menu menu = new Menu(tree);
    tree.setMenu(menu);
    menu.addMenuListener(new MenuAdapter()
    {
        public void menuShown(MenuEvent e)
        {
            MenuItem[] items = menu.getItems();
            for (int i = 0; i < items.length; i++)
            {
                items[i].dispose();
            }
            MenuItem newItem = new MenuItem(menu, SWT.NONE);
            newItem.setText("Menu for " + tree.getSelection()[0].getText());
        }
    });

    shell.pack();
    shell.open();
    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}
publicstaticvoidmain(字符串[]args)
{
Display=Display.getDefault();
最终外壳=新外壳(显示);
shell.setText(“StackOverflow”);
setLayout(新的FillLayout());
最终树=新树(shell,SWT.NONE);
对于(int i=0;i<10;i++)
{
TreeItem=新的TreeItem(树,SWT.NONE);
项目.setText(“父项”+i);
对于(int j=0;j<3;j++)
{
TreeItem子项=新的TreeItem(项目,SWT.NONE);
setText(“child”+i+“”+j);
}
}
最终菜单=新菜单(树);
设置菜单(菜单);
menu.addMenuListener(新的MenuAdapter()
{
公共无效menuShown(MenuEvent e)
{
MenuItem[]items=menu.getItems();
对于(int i=0;i
@dic19我必须只使用SWT。向树中添加一个侦听器(事件为SWT.MenuDetect)是不起作用的。是否有办法仅为树的第一级锁定菜单的显示?例如,要仅显示根目录。@Justplayit94您需要在
树中添加
menudeteclistener
,并检查项目的级别。如果不需要菜单,则将
menudetecevent#doit
设置为
false
。如果你不能让它工作,就发布一个新问题,我会发布一个详细的答案。你能告诉我如何获得树中某个项目的级别吗?@Justplayit94我想你必须调用
getParentItem()
TreeItem
上,直到它返回
null
并计数。我必须在哪里设置
doit
属性?在菜单的侦听器之前还是之后?