2014-04-23 74 views
1

有一個ContextMenu有兩個選項,當第二個選項(代碼中的item2)用鼠標右鍵按下時,我希望它打印出一些文本,所以我知道我確實激活了它。直到現在,當我點擊第二個鼠標按鈕時沒有任何反應。爲什麼MenuItem沒有響應?

我還沒有太多的經驗與事件處理程序,所以我道歉,如果我犯了一個noobish錯誤。

private void maakContextMenu() { 
    menu = new ContextMenu(); 
    MenuItem item = new MenuItem("Kleur Assen"); 
    MenuItem item2 = new MenuItem("tweede optie"); 
    final LissajousCanvas canvas = this; 
    item.setOnAction(new EventHandler<ActionEvent>() { 

     @Override 
     public void handle(ActionEvent event) { 
      new KiesKleur(canvas).show(); 
     } 
    }); 
    item2.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>(){ 

     @Override 
     public void handle(MouseEvent t) { 
      System.out.println("in the loop"); 
      if(t.getSource()==MouseButton.SECONDARY){ 
       System.out.println("in too deep"); 
      } 
      new KiesKleur(canvas).show(); 
     } 

    }); 
    menu.getItems().addAll(item, item2); 
} 
+0

這似乎是一個錯誤。在JavaFX問題跟蹤器中搜索相似的問題,並從中獲得解決方法。不相關的,但你的代碼中的另一個問題是t.getSource()。它應該是t.getButton()。 –

回答

2

一個MenuItem實際上不是Node,所以它不是在Node s爲方式的場景圖的一部分。所以我不確定這是否是一個錯誤;我認爲它可能只實現EventTarget,所以它可以專門生成ActionEvent。您會注意到沒有可用的setOnMouseClicked(...)方法。

這是一個解決方法。我不知道爲什麼它只有MOUSE_PRESSED而不是與MOUSE_CLICKED作品,但它很可能是與產生的動作事件默認的鼠標事件處理:

private void maakContextMenu() { 
    menu = new ContextMenu(); 
    MenuItem item = new MenuItem("", new Label("Kleur Assen")); 
    Label menuItem2Label = new Label("tweede optie"); 
    MenuItem item2 = new MenuItem("", menuItem2Label); 
    final LissajousCanvas canvas = this; 
    item.setOnAction(new EventHandler<ActionEvent>() { 

     @Override 
     public void handle(ActionEvent event) { 
      new KiesKleur(canvas).show(); 
     } 
    }); 
    menuItem2Label.addEventHandler(MouseEvent.MOUSE_PRESSED, new EventHandler<MouseEvent>(){ 

     @Override 
     public void handle(MouseEvent t) { 
      System.out.println("in the loop"); 
      if(t.getButton()==MouseButton.SECONDARY){ 
       System.out.println("in too deep"); 
      } 
      new KiesKleur(canvas).show(); 
     } 

    }); 
    menu.getItems().addAll(item, item2); 
} 
相關問題