如何区分右键单击和左键单击swt中的弹出菜单?
通过添加一个SelectionListener,我可以同时执行左键和右键,但是如何操作 我知道使用了哪一个吗?是否可以在MenuItem上使用MouseListener?
我想要做的是类似于浏览器收藏夹菜单,左键单击选择 然后右键单击最喜欢的上下文菜单。
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" );
}
});
澄清: 对不起,没有设置屏幕截图,但我想如果你按照这个描述你可以看到我的意思。
我还需要为同一个MenuItem执行两个不同的操作(实际上与浏览器的目的相同)。
答案 0 :(得分:4)
您可以左键单击SWT.Selection
,右键单击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.MenuDetect
监听器。只需拨打Button#setMenu(Menu)
即可完成任务。