2012-04-02 23 views
2

(弹出)我在JavaFX 2使用上下文菜单的一个问题:当我点击左侧的JFXPanel文本菜单总是

图表它从来没有disappers有谁知道如何解决这个问题?

感谢

这里是我的代码

final ContextMenu cm = new ContextMenu(); 
      MenuItem chartItem1 = new MenuItem("Chart Settings"); 

      cm.getItems().add(chartItem1); 

      getScene().setOnMouseReleased(new EventHandler<MouseEvent>() { 
     @Override 
     public void handle(MouseEvent mouseEvent) { 
      if(cm.isShowing()){ 
       cm.hide(); 
      } 
      if(mouseEvent.getButton() == MouseButton.SECONDARY) 
      { 
       cm.show(getScene().getRoot(), mouseEvent.getScreenX(), mouseEvent.getScreenY()); 
      } 
     } 
    }); 
      chartItem1.setOnAction(new EventHandler<ActionEvent>() { 
       @Override 
       public void handle(ActionEvent t) { 
        dialogs.ChartFormat cs = new dialogs.ChartFormat(null, true);     
        cs.setLocationRelativeTo(null); 
        cs.setVisible(true);     
       } 
       }); 
+0

你可以请张贴一些代码给你的问题。我使用[this javadoc]中的代码制作了一个演示应用程序(http://docs.oracle.com/javafx/2.0/api/javafx/embed/swing/JFXPanel.html),并在场景中添加了“ContextMenu”控件。它在JavaFX 2.0.1中为我工作。 – 2012-04-03 10:43:46

回答

1

转载描述的行为。不知道的原因,但你可以用ContextMenu#hide()

final ContextMenu cm = new ContextMenu(); 

MenuItem menuItem = new MenuItem("Item 1"); 
menuItem.addEventHandler(EventType.ROOT, new EventHandler<Event>() { 

     @Override 
     public void handle(Event t) { 
      SwingUtilities.invokeLater(new Runnable() { 

       @Override 
       public void run() { 
        JPanel messagePane = new JPanel(); 
        messagePane.add(new JLabel("label")); 
        JDialog jDialog = new JDialog(); 
        jDialog.getContentPane().add(messagePane); 
        jDialog.pack(); 
        jDialog.setVisible(true); 
       } 
      }); 
     } 
    }); 
cm.getItems().add(menuItem); 

scene.setOnMouseReleased(new EventHandler<MouseEvent>() { 
    @Override 
      public void handle(MouseEvent mouseEvent) { 
       // if(cm.isShowing()) 
       cm.hide(); 
       if (mouseEvent.getButton() == MouseButton.SECONDARY) { 
        cm.show(lineChart, mouseEvent.getScreenX(), mouseEvent.getScreenY()); 
       } 
      } 
     }); 

您也可以查看以下链接:
http://pixelduke.wordpress.com/2011/12/11/popupmenu-in-javafx/
http://javafx-jira.kenai.com/browse/RT-17853
http://javafx-jira.kenai.com/browse/RT-14899

添加示例代码到你的问题会更多描述。

+0

谢谢Uluk,你的建议工作正常,但我仍然有一个问题: 如果我右键单击我可以看到弹出窗口,并用左键单击它消失的任何地方,所以一切都好。 我的弹出窗口有一个项目,通过在这个项目上点击一个JDialog出现,这里是问题:当我在弹出窗口中点击这个项目时,对话框出现,但弹出窗口仍然存在。 – 2012-04-03 11:47:29

+0

更新了代码和答案。当我点击MenuItem时,JDialog显示出来,ContextMenu消失。你使用的是什么版本的javafx? – 2012-04-03 13:01:27

+0

我正在使用JavFX 2.0,NetBeans 7.1 – 2012-04-03 13:28:38