ContextMenu中的JavaFX ColorPicker

时间:2014-11-10 23:46:08

标签: java javafx

我试图实现代码将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,或者是否还有另一种方法可以让我获得所需的效果。

0 个答案:

没有答案