2011-11-12 102 views
0

我想在jtree中根據哪個節點右鍵點擊一個條件彈出菜單。可能嗎?我實現它如下,但如果我點擊深度級別1節點首先它顯示正確的彈出菜單,但之後,如果我右鍵點擊節點級別2我仍然得到相同的彈出菜單級別1和反之亦然。jtree中的條件彈出式菜單

DefaultMutableTreeNode node = (DefaultMutableTreeNode) pmTree.getLastSelectedPathComponent(); 
    popup = new JPopupMenu(); 
    popup.setInvoker(pmTree); 
    PopupHandler handler = new PopupHandler(pmTree, popup); 


    if(node.getLevel() == 1) 
    { 
     popup.add(getMenuItem("Start a VM", handler)); 
     popup.add(getMenuItem("Monitor all VMs", handler)); 

    } 

    else if(node.getLevel() == 2) 
    { 
     popup.add(getMenuItem("Change VM configuration", handler)); 
     popup.add(getMenuItem("Monitor VM", handler)); 
     popup.add(getMenuItem("Migrate VM", handler)); 
     popup.add(getMenuItem("Show VM Configuration", handler)); 
     popup.add(getMenuItem("Stop VM", handler)); 
    } 

回答

2

這個問題似乎是有關您的情況:

JTree and dropdown options on right clicking nodes

你可以發佈更多的代碼?

很難說,沒有更多的上下文,但我認爲問題是菜單是建立和初始化的第一次點擊,但不是在隨後的點擊取代。

1

這應該是可能的,首先嚐試打印出node.getLevel()以確保級別在輸入條件代碼之前是正確的。由於你每次創建一個新的JPopupMenu對象時,似乎並不需要在彈出窗口上調用removeAll()。每次單擊節點時,此代碼是否在方法中調用?也有可能第1級的節點是來自第2級節點的陰影輸入?