2012-04-02 6 views
2

上(ポップアップ)が、私はJavaFXの2のコンテキストメニューに問題がある:私はJFXPanelたContextMenu常に

のグラフ上で左クリックしたときに、それは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で私のために働いています。 –

答えて

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、あなたの提案は適切に機能していますが、私はまだ問題があります: 私が右クリックすると、ポップアップが表示され、グラフのどこかで左クリックすると消えます。 ポップアップに項目があり、この項目をblickingするとJDialogが表示され、問題が発生します。ポップアップでこの項目をクリックするとダイアログが表示されますが、ポップアップは残っています。 –

+0

コードと回答を更新しました。 MenuItemをクリックすると、JDialogが表示され、ContextMenuが消えます。 javafxのどのバージョンを使用していますか? –

+0

私はJavFX 2.0、NetBeans 7.1を使用しています –