2017-12-29 45 views
0

Ich habe eine Frage in JavaFX, wie ich eine Event-Handler-Set kann für das Menü (nicht Menüleiste oder Menüpunkt), dass, wenn ich im Menü angezeigt ein Popup-Fenster geklickt habe. Ich habe dies versucht, aber wenn ich auf Menü nichts klicken passiert:Event-Handler in JavaFX für das Menü

settingsMenu.addEventHandler(MouseEvent.MOUSE_CLICKED,event -> {//To DO}); 

und auch der folgende Code nicht funktioniert:

settingMenu.setOnAction(event -> {//To Do}); 
+2

AFAIK können Sie nicht; Das Menü löst kein Aktionsereignis aus (und löst keine Mausereignisse aus; es ist kein 'Node'). Tut 'settingsMenu.showingProperty(). AddListener (...)' was du willst? –

+0

Danke, ich werde es versuchen. –

+0

Normalerweise ist es Ihnen egal, wenn ein Benutzer auf ein Menü klickt. Das Menü zeigt nur seine Menüpunkte, wenn Sie dies tun. Warum willst du einen Zuhörer dafür? –

Antwort

0

Hier ist ein Hack. Menu hat einen Konstruktor Menu(String text, Node graphic). Stellen Sie die String-empty-string und die Node-Label. Dann fügen Sie MouseListener zu Label hinzu.

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Label; 
import javafx.scene.control.Menu; 
import javafx.scene.control.MenuBar; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

/** 
* 
* @author Sedrick 
*/ 
public class JavaFXApplication33 extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     Label label = new Label("Help!"); 
     label.setOnMouseClicked(mouseEvent->{System.out.println("Hello World!");}); 
     Menu menu = new Menu("", label); 
     MenuBar menuBar = new MenuBar(); 
     menuBar.getMenus().add(menu); 


     StackPane root = new StackPane(); 
     root.getChildren().add(menuBar); 

     Scene scene = new Scene(root, 300, 250); 

     primaryStage.setTitle("Hello World!"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 

} 
+0

danke, dass für Ihre Kommentare, das ist, was ich brauche. –

Verwandte Themen