2014-10-30 5 views
1

Как я могу выделить щелчок правой кнопкой мыши по щелчку левой кнопкой мыши по всплывающему меню в swt?Java, swt, Как отличить щелчок правой кнопкой мыши по щелчку левой кнопкой мыши по всплывающему меню

Добавляя SelectionListener, я могу действовать как слева, так и правой кнопкой мыши, но как знаю, какой из них использовался? Возможно ли иметь MouseListener в MenuItem?

Что я хочу сделать, это похоже на меню избранных браузеров, щелкните левой кнопкой мыши, чтобы выбрать , и щелкните правой кнопкой мыши для избранного контекстного меню.

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 (или, возможно, любой другой браузер)
  2. Если щелкнуть левой кнопкой мыши на одном из избранных браузер откроет этот URL, , но вы можете также правой кнопкой мыши на этом любимый.
  3. Щелкните правой кнопкой мыши, чтобы открыть контекстное меню для выбранного избранного.

Мне также нужны два разных действия для одного и того же MenuItem (фактически для той же цели, что и браузер).

+0

Хорошо, но выберите (левый клик) и контекстное меню (правый щелчок) уже включены в мой ответ ... – Baz

+0

Да на кнопке, но мне это не удалось сделать в MenuItem. На самом деле я подозреваю, что os имеет только «выбранное» событие для меню, и, насколько я вижу, это событие не содержит информации о том, какая кнопка используется. В браузере это может быть виджет, который выглядит только как меню. Конечно, я мог бы это сделать, но это сэкономило бы много работы, если бы можно было использовать Меню. – owan

+0

Хорошо, после некоторого тестирования я уверен, что невозможно различать левый и правый щелчок на «MenuItem». – Baz

ответ

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) делает работу просто отлично.

+0

ok спасибо, но это MenuItem newItem. Я бы хотел, чтобы я нашел право/левый клик. Добавление newItem.addListener (SWT.MenuDetect ..., похоже, не работает. – owan

+0

@owan Итак, какой именно щелчок должен делать в пункте меню? – Baz

+0

Это должно открыть контекстное меню, в котором вы можете удалить или переименовать пункт меню Это почти то же самое, что браузер будет обрабатывать любимый (по крайней мере, проводник или firefox). – owan