ContextMenu(弹出窗口)始终打开

时间:2012-04-02 17:45:49

标签: javafx-2

我在JavaFx 2中遇到了一个上下文菜单的问题:当我点击JFXPanel的图表时它永远不会消失

有人知道如何解决这个问题吗?

由于

这是我的代码

 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);                
                }
              });

1 个答案:

答案 0 :(得分: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

在您的问题中添加示例代码会更具描述性。