2011-11-12 14 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()を印刷して、条件コードに入る前にレベルが正しいことを確認してください。ポップアップでremoveAll()を呼び出す必要があると思われないたびに、新しいJPopupMenuオブジェクトを作成しているためです。このコードは、ノードがクリックされるたびにMethodで呼び出されますか?レベル1のノードがレベル2のノードからのシャドウイング入力である可能性もありますか?