当前位置: 首页 > 知识库问答 >
问题:

Java,swt,如何区分右击和左击弹出菜单

锺离锦
2023-03-14

如何在swt中区分右键单击和左键单击弹出菜单?

通过添加SelectionListener,我可以在左键和右键上进行操作,但我如何知道使用了哪一个呢?有可能在菜单上安装鼠标听筒吗?

我想做的类似于浏览器的收藏夹菜单,左键单击选择,右键单击选择收藏夹关联菜单。

Button bn = new Button(shell, SWT.FLAT);
bn.setText("Right Click to see the popup menu");

Menu popupMenu = new Menu(bn);
MenuItem newItem = new MenuItem(popupMenu, SWT.CASCADE);
newItem.setText("New");

newItem.addSelectionListener(new SelectionListener() {
 public void widgetSelected(SelectionEvent e) {    
      System.out.print("SELECTED1\n" );
 }
 public void widgetDefaultSelected(SelectionEvent e) {
      System.out.print("SELECTED2\n" );
 }
});

澄清一下:抱歉,没有包含屏幕截图,但是我想你可以明白我的意思,如果你遵循这个描述。

  1. 在Windows资源管理器(或任何其他浏览器)中选择“收藏夹”菜单。

对于同一个菜单项,我还需要两个不同的操作(实际上是为了与浏览器相同的目的)。

共有1个答案

刘修能
2023-03-14

您可以在左键侦听SWT。选择,右键侦听SWT。MenuDetect

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

    Button bn = new Button(shell, SWT.FLAT);
    bn.setText("Right Click to see the popup menu");

    Menu popupMenu = new Menu(bn);
    MenuItem newItem = new MenuItem(popupMenu, SWT.CASCADE);
    newItem.setText("New");

    bn.addListener(SWT.Selection, new Listener()
    {
        @Override
        public void handleEvent(Event e)
        {
            System.out.println("click");
        }
    });
    bn.addListener(SWT.MenuDetect, new Listener()
    {
        @Override
        public void handleEvent(Event e)
        {
            System.out.println("menu");
        }
    });
    bn.setMenu(popupMenu);

    shell.pack();
    shell.open();

    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
        {
            display.sleep();
        }
    }
    display.dispose();
}

也就是说,对于菜单,你不需要SWT。菜单检测监听器。只要调用按钮#设置菜单(Menu)就可以了。

 类似资料:
  • 问题内容: 我试图区分OnClick函数中的左键单击和右键单击。但, 证明e 。对于合成事件未定义。如何在此处区分左键和右键? 问题答案: 您也可以这样做。同时拥有onClick和onContextMenu处理程序 您可以根据其他答案的建议进行检查,也可以进行检查。(此外,如果右键单击,请阻止默认设置。) 使用 使用 这是一个演示 http://jsbin.com/seyeliv/edit?htm

  • 我在我的项目中实现了一个SWT浏览器来显示HTML页面。当用户右键点击该浏览器时,它会显示一个弹出菜单,具有“打印”、“打印视图”等功能。如果我把按钮放在工具栏上,可以用单独的按钮来完成吗? 浏览器控件的另一个功能是使用“Ctrl F”,这会带来一个查找对话框。这个对话可以用按钮来调用吗? 请帮帮我?

  • 从pygame的api来看,它有: 但是没有办法区分右点击和左点击?

  • 问题内容: 我在论坛上搜索并看到以下代码: 但是代码运行不正确(有时会打印出“并且单击一次!” 2次。应该打印出“并且双击!”)。有人可以告诉我为什么吗?还是可以给我一些更好的方法呢?谢谢! 问题答案: 有时它会打印出“并且只需单击一次!” 2次 。它应该打印出“,这是双击!”)。 那是正常的。仅当您在指定的时间间隔内单击两次时,才会发生双击。因此,有时如果单击速度不够快,您将连续获得两次单击。

  • 问题内容: 我有一个id为id的按钮。我将此元素附加了两个jQuery事件 1。 2。 但是每次它给我 问题答案: 您需要使用超时来检查第一次点击后是否还有另一次点击。 这是窍门: 用法:

  • 问题内容: 如何在SWT树中的树项上添加右键单击弹出菜单。每个树项目都应在其上启用右键 问题答案: 只需使用。 你去了: