是否可以使用SWT在表項上顯示右鍵單擊菜單?對於每個項目,菜單都會有所不同,例如對於某些行,某些菜單項將啓用,對於其他項,則會禁用它們。所以,每一行都需要自己的菜單,當設置菜單時,我需要一種方法來確定我正在使用哪一行。顯示SWT TableItem的右鍵單擊菜單?
任何想法?
是否可以使用SWT在表項上顯示右鍵單擊菜單?對於每個項目,菜單都會有所不同,例如對於某些行,某些菜單項將啓用,對於其他項,則會禁用它們。所以,每一行都需要自己的菜單,當設置菜單時,我需要一種方法來確定我正在使用哪一行。顯示SWT TableItem的右鍵單擊菜單?
任何想法?
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)
}
});
,不使用DynamicTable:
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);
}
}
});
代碼將不起作用,除非您將''contextMenu''聲明爲'final''。 – user1438038
@ user1438038除非您使用Java 8 –
正確。好點子。 – user1438038
聽力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;
}
}
});
這個代碼的問題是,菜單項「測試項目」也將用於表頭。 –
的[添加右鍵菜單在SWT樹treeitem(可能重複http://stackoverflow.com/questions/18403137/adding-right-click-menu -to-to-treeitem-in-swt-tree) – Baz
上面的鏈接類似於'Table'而不是'Tree'。 – Baz
@Baz這與我在這裏提到的不一樣,比如特定於被右鍵單擊的行。 – user2790209