2013-09-23 34 views
3

是否可以使用SWT在表項上顯示右鍵單擊菜單?對於每個項目,菜單都會有所不同,例如對於某些行,某些菜單項將啓用,對於其他項,則會禁用它們。所以,每一行都需要自己的菜單,當設置菜單時,我需要一種方法來確定我正在使用哪一行。顯示SWT TableItem的右鍵單擊菜單?

任何想法?

+0

的[添加右鍵菜單在SWT樹treeitem(可能重複http://stackoverflow.com/questions/18403137/adding-right-click-menu -to-to-treeitem-in-swt-tree) – Baz

+1

上面的鏈接類似於'Table'而不是'Tree'。 – Baz

+0

@Baz這與我在這裏提到的不一樣,比如特定於被右鍵單擊的行。 – user2790209

回答

1
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

+0

什麼是DynamicTable? – Baz

+0

@Baz我認爲這可能是︰https://code.google.com/a/eclipselabs.org/p/opal/wiki/DynamicTableColumns –

+0

@ClickUpvote我看到了,所以它是完全無關的問題? – Baz

2

,不使用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); 
      } 

     } 

    }); 
+0

代碼將不起作用,除非您將''contextMenu''聲明爲'final''。 – user1438038

+2

@ user1438038除非您使用Java 8 –

+0

正確。好點子。 – user1438038

5

聽力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; 
    } 
    } 
}); 
+0

這個代碼的問題是,菜單項「測試項目」也將用於表頭。 –