我试图实现代码将JavaFX ColorPicker放在ContextMenu中,这样当右键单击Rectangle时,ContextMenu会显示ColorPicker,并允许用户将Rectangle的颜色设置为ColorPicker的价值在于。我目前正在做的是将ColorPicker放在一个进入ContextMenu内部的MenuItem中。但是,我遇到一个问题,当用户选择"自定义颜色"时,ColorPicker会中断。链接。我已经确定这是JavaFX 8的一个问题,因为将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);
}
}
我的问题是,是否有其他方法可以将ColorPicker添加到ContextMenu,或者是否还有另一种方法可以让我获得所需的效果。