Search code examples
javafxmouseeventcontextmenu

How to change contextMenu default mouse button?


I have a contextMenu and I added it to a button. I want the contextMenu to be displayed when I left-click(PRIMARY) on the button. How can I do this? Because by default just right-clicking does this.

I tried this way but it did not work

Button sortBy = new Button();

ContextMenu sortByMenu = new ContextMenu();
    sortByMenu.addEventFilter(MouseEvent.MOUSE_PRESSED, ev -> {
        if (ev.getButton() == MouseButton.PRIMARY) {
            //does not do anything
        }
    });

 sortBy.setContextMenu(sortByMenu);

Solution

  • MenuButton

    MenuButton is a button which, when clicked or pressed, will show a ContextMenu.

    Example code from the javadoc:

    MenuButton m = new MenuButton(
        "Eats"
    );
    m.getItems().addAll(
        new MenuItem("Burger"),
        new MenuItem("Hot Dog")
    );
    

    ChoiceBox

    You could also consider a ChoiceBox, depending on what you are trying to do.

    The ChoiceBox is used for presenting the user with a relatively small set of predefined choices from which they may choose.

    ChoiceBox<String> cb = new ChoiceBox<>();
    cb.getItems().addAll(
        "item1",
        "item2",
        "item3"
    );
    

    To select a sortBy sorting field from a list of choices, a ChoiceBox would probably be a good fit.