【问题标题】:Show Colorpicker from Contextmenu从上下文菜单显示颜色选择器
【发布时间】:2015-08-06 07:23:51
【问题描述】:

我想从上下文菜单中显示颜色选择器:

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());
            }
        }
    });

此代码不起作用,当我单击上下文菜单“选择颜色”时,我看不到颜色选择器。实现这一点的正确方法是什么?

我得到这个结果:

【问题讨论】:

  • 在哪里添加colorssPicker 到菜单中?检查此answer,以及此行:editLabel.setGraphic(picker);
  • 我更新了代码,但最终结果并不好。我能以某种方式解决这个问题吗?
  • 你期待什么结果?
  • 我能不能让它看起来像这样docs.oracle.com/javafx/2/ui_controls/img/color-picker-css2.png 并将它放在文本的位置进入上下文菜单?
  • 所以要去掉按钮样式,去掉菜单项的文字?

标签: javafx javafx-8


【解决方案1】:

此 sn-p 将让您显示嵌入到 ContextMenu 中的 ColorPicker 控件。

您可以设置它的背景颜色,使其看起来不像按钮。

@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();
}

【讨论】:

  • 谢谢!顺便说一句,当我从颜色选择器中选择“自定义颜色”时,我在线程“JavaFX 应用程序线程”中出现异常 java.lang.NullPointerException 看起来 JavaFX 中存在内部错误。
  • 是的,已经是known,但还没有修复……
  • 没有解决方法来保持实际控制。我已经通过在原始控件的基础上创建 custom 颜色选择器控件来解决它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多