2014-04-23 46 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); 
} 
相关问题