Отображение контекстного меню для SWT TableItem?
Можно ли отобразить меню правой кнопкой мыши на элементах таблицы с помощью SWT? Меню будет отличаться для каждого элемента, например для некоторых строк, некоторые пункты меню будут включены, для других они будут отключены. Таким образом, каждая строка будет нуждаться в своем собственном меню, и при настройке меню мне понадобится способ определить, с какой строкой я работаю.
Есть идеи?
3 ответа:
Прослушивание
SWT.MouseDown
, как предлагает @user4793956, совершенно бесполезно. Контекстное меню всегда вызывается, нет необходимости вызыватьsetVisible(true)
. Совсем наоборот, вам нужно отменить событиеSWT.MenuDetect
, из вас Не хотят, чтобы меню выскочило.Это работает для меня:
// Create context menu Menu menuTable = new Menu(table); table.setMenu(menuTable); // Create menu item MenuItem miTest = new MenuItem(menuTable, SWT.NONE); miTest.setText("Test Item"); // Do not show menu, when no item is selected table.addListener(SWT.MenuDetect, new Listener() { @Override public void handleEvent(Event event) { if (table.getSelectionCount() <= 0) { event.doit = false; } } });
Без использования динамической таблицы:
Menu contextMenu = new Menu(table); table.setMenu(contextMenu); MenuItem mItem1 = new MenuItem(contextMenu, SWT.None); mItem1.setText("Menu Item Test."); table.addListener(SWT.MouseDown, new Listener(){ @Override public void handleEvent(Event event) { TableItem[] selection = table.getSelection(); if(selection.length!=0 && (event.button == 3)){ contextMenu.setVisible(true); } } });
table = new DynamicTable(shell, SWT.BORDER | SWT.FULL_SELECTION); table.addMenuDetectListener(new MenuDetectListener() { @Override public void menuDetected(MenuDetectEvent e) { int index = table.getSelectionIndex(); if (index == -1) return; //no row selected TableItem item = table.getItem(index); item.getData(); //use this to identify which row was clicked. //The popup can now be displayed as usual using table.toDisplay(e.x, e.y) } });
Подробнее: http://www.eclipsezone.com/eclipse/forums/t49734.html