2014-04-23 5 views
1

두 가지 옵션이있는 ContextMenu가 있는데 두 번째 옵션 (코드의 item2)을 마우스 오른쪽 버튼으로 누르면 텍스트를 인쇄하여 실제로 활성화했음을 알 수 있습니다. 지금까지 두 번째 mousebutton을 클릭해도 아무 일도 일어나지 않습니다.MenuItem이 응답하지 않는 이유는 무엇입니까?

나는 사건 처리사들과 함께 많은 경험을하지 못해서, 내가 노략질 한 실수를 저질렀다면 사과드립니다.

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들이라는 방법으로 장면 그래프의 일부가 아니다. 그래서 이것이 버그인지 아닌지 잘 모르겠습니다. 나는 아마 을 생성 할 수 있도록 EventTarget만을 구현한다고 생각한다. 사용 가능한 setOnMouseClicked(...) 방법이 없다는 것을 알게 될 것입니다.

해결 방법은 다음과 같습니다. 그것은 단지 MOUSE_CLICKEDMOUSE_PRESSED하지 작동 이유를 잘 모르겠어요,하지만 액션 이벤트를 생성하는 기본 마우스 이벤트 처리와 함께 할 가능성이 뭔가 :

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); 
} 
관련 문제