Peter Penzov
Peter Penzov

Reputation: 1678

Show Colorpicker from Contextmenu

I want to show Colorpicker from Context Menu:

ColorPicker colorssPicker = new ColorPicker();

    final MenuItem resizeItem = new MenuItem("Option 1");
    resizeItem.setOnAction(new EventHandler<ActionEvent>()
    {
        @Override
        public void handle(ActionEvent event)
        {

        }
    });

    final MenuItem resizesItem = new MenuItem();
    resizesItem.setGraphic(colorssPicker);
    resizesItem.setOnAction(new EventHandler<ActionEvent>()
    {
        @Override
        public void handle(ActionEvent event)
        {

        }
    });

    final ContextMenu menu = new ContextMenu();

    menu.getItems().addAll(resizeItem, resizesItem);

    sc.setOnMouseClicked(new EventHandler<MouseEvent>()
    {
        @Override
        public void handle(MouseEvent event)
        {
            if (MouseButton.SECONDARY.equals(event.getButton()))
            {
                menu.show(primaryStage, event.getScreenX(), event.getScreenY());
            }
        }
    });

This code is not working, I can't see Colorpicker when I click on the Contextmenu "Choose Color". What is the proper way to implement this?

I get this result:

enter image description here

Upvotes: 0

Views: 1862

Answers (1)

Jos&#233; Pereda
Jos&#233; Pereda

Reputation: 45456

This snippet will let you show a ColorPicker control embedded into a ContextMenu.

You can style it so it doesn't look like a button, by setting its backgound color.

@Override
public void start(Stage primaryStage) {
    StackPane root = new StackPane();

    final ColorPicker colorssPicker = new ColorPicker();
    colorssPicker.setStyle("-fx-background-color: white;");

    final MenuItem otherItem = new MenuItem(null, new Label("Other item"));

    final MenuItem resizeItem = new MenuItem(null,colorssPicker);
    resizeItem.setOnAction(new EventHandler<ActionEvent>(){
        @Override
        public void handle(ActionEvent event)
        {
            root.setBackground(new Background(new BackgroundFill(colorssPicker.getValue(),null,null)));
        }
    });

    final ContextMenu menu = new ContextMenu(otherItem,resizeItem);

    Scene scene = new Scene(root, 300, 250);
    scene.setOnMouseClicked(new EventHandler<MouseEvent>(){
        @Override
        public void handle(MouseEvent event){
            if (MouseButton.SECONDARY.equals(event.getButton())){
                menu.show(primaryStage, event.getScreenX(), event.getScreenY());
            }
        }
    });

    primaryStage.setScene(scene);
    primaryStage.show();
}

ColorPicker

Upvotes: 2

Related Questions