上下文菜单中的JavaFX ColorPicker

上下文菜单中的JavaFX ColorPicker,java,javafx,Java,Javafx,我试图实现将JavaFX ColorPicker放在ContextMenu中的代码,这样当右键单击矩形时,ContextMenu会显示ColorPicker,并允许用户将矩形的颜色设置为ColorPicker的值。我目前正在做的是将ColorPicker放入ContextMenu中的MenuItem中。但是,我遇到了一个问题,当用户选择“自定义颜色”链接时,颜色选择器会中断。我已经确定这是JavaFX8的一个问题,它是将ColorPicker放在ContextMenu的MenuItem中的结果。

我试图实现将JavaFX ColorPicker放在ContextMenu中的代码,这样当右键单击矩形时,ContextMenu会显示ColorPicker,并允许用户将矩形的颜色设置为ColorPicker的值。我目前正在做的是将ColorPicker放入ContextMenu中的MenuItem中。但是,我遇到了一个问题,当用户选择“自定义颜色”链接时,颜色选择器会中断。我已经确定这是JavaFX8的一个问题,它是将ColorPicker放在ContextMenu的MenuItem中的结果。下面是一些代码,显示我正在尝试做什么,并显示问题

package test;

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.geometry.Side;
import javafx.scene.control.ColorPicker;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Test extends Application {

@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Test");

Rectangle rect = new Rectangle(25,25,Color.LIGHTGREY);
ColorPicker colorPicker = new ColorPicker();
ContextMenu contextMenu = new ContextMenu();
MenuItem changeColor = new MenuItem();

changeColor.setGraphic(colorPicker);
contextMenu.getItems().add(changeColor);

rect.setOnMouseClicked(new EventHandler<MouseEvent>(){
    @Override
    public void handle(MouseEvent e){
        ((Rectangle)e.getSource()).setStroke(Color.BLACK);
        ((Rectangle)e.getSource()).setStrokeWidth(4);
        if(e.getButton() == MouseButton.SECONDARY){
            contextMenu.show((Rectangle)e.getSource(),Side.TOP,0,0);
        }
    }
});

StackPane root = new StackPane();
root.getChildren().add(rect);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}

public static void main(String[] args){
launch(args);
}
}
封装测试;
导入javafx.application.application;
导入javafx.event.EventHandler;
导入javafx.geometry.Side;
导入javafx.scene.control.ColorPicker;
导入javafx.scene.scene;
导入javafx.scene.paint.Color;
导入javafx.scene.shape.Rectangle;
导入javafx.scene.control.ContextMenu;
导入javafx.scene.control.MenuItem;
导入javafx.scene.input.MouseButton;
导入javafx.scene.input.MouseEvent;
导入javafx.scene.layout.StackPane;
导入javafx.stage.stage;
公共类测试扩展了应用程序{
@凌驾
公共无效开始(阶段primaryStage){
初级阶段。设置标题(“测试”);
矩形rect=新矩形(25,25,颜色为浅灰色);
ColorPicker ColorPicker=新的ColorPicker();
ContextMenu ContextMenu=新建ContextMenu();
MenuItem changeColor=新MenuItem();
changeColor.setGraphic(颜色选择器);
contextMenu.getItems().add(changeColor);
setOnMouseClicked(新的EventHandler(){
@凌驾
公共无效句柄(MouseEvent e){
((矩形)e.getSource()).setStroke(颜色.黑色);
((矩形)e.getSource()).setStrokeWidth(4);
如果(例如getButton()==MouseButton.SECONDARY){
show((矩形)e.getSource(),Side.TOP,0,0);
}
}
});
StackPane root=新的StackPane();
root.getChildren().add(rect);
原始阶段。设置场景(新场景(根,300250));
primaryStage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}

我的问题是,是否有其他方法可以将ColorPicker添加到ContextMenu中,或者是否有另一种方法完全可以让我获得所需的效果。

通过“ColorPicker在用户选择“自定义颜色”链接时中断”,我想您的意思是它会导致Java崩溃(这是我在OS X上使用Java 8u20运行程序时的行为)。我建议你在中为此提交一个bug。我会这样做。你有什么想法可以让我达到预期的效果吗?我现在没有其他想法,Leathis。其他人可能会有一些想法,当你发布bug时,你可能会从JavaFX开发人员那里得到一些帮助或解决建议。好的,我只是发布了它,所以我会继续尝试不同的事情,等待他们的消息。谢谢jewelsea。有什么解决办法吗?我也很感兴趣如何解决这个问题?