Package com.fxexperience.javafx.scene.control.colorpicker

Source Code of com.fxexperience.javafx.scene.control.colorpicker.ColorPicker

package com.fxexperience.javafx.scene.control.colorpicker;

import javafx.beans.binding.ObjectBinding;
import javafx.beans.binding.StringBinding;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.effect.DropShadow;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import javafx.scene.shape.Rectangle;
import javafx.scene.shape.RectangleBuilder;

/**
* @author Jasper Potts
*/
public class ColorPicker extends Button {
   
    private ObjectProperty<Color> color = new SimpleObjectProperty<Color>(Color.RED);
    public ObjectProperty<Color> colorProperty() { return color; }
    public Color getColor() { return color.get(); }
    public void setColor(Color newColor) { color.set(newColor); }
   
    private ColorPickerPopover popover;
   
    public ColorPicker() {
        this(Color.BLACK);
    }
   
    public ColorPicker(Color startColor) {
        setMinWidth(USE_PREF_SIZE);
        setMaxWidth(Double.MAX_VALUE);
        setAlignment(Pos.BASELINE_LEFT);
        getStyleClass().add("color-picker");
        color.set(startColor);
        textProperty().bind(new StringBinding() {
            { bind(color); }
            @Override protected String computeValue() {
                return getWebColor(getColor());
            }
        });
        setOnAction(new EventHandler<ActionEvent>() {
            @Override public void handle(ActionEvent arg0) {
                if (popover == null) {
                    popover = new ColorPickerPopover();
                    popover.colorProperty().addListener(new ChangeListener<Color>() {
                        @Override public void changed(ObservableValue<? extends Color> arg0, Color arg1, Color newValue) {
                            setColor(newValue);
                        }
                    });
                }
                if (popover.isShowing()) {
                    popover.hide();
                } else {
                    popover.setColor(getColor());
                    popover.show(ColorPicker.this);
                }
            }
        });
        Rectangle colorRect = RectangleBuilder.create()
                .width(16).height(16)
                .build();
        colorRect.fillProperty().bind(new ObjectBinding<Paint>() {
            { bind(color); }
            @Override protected Paint computeValue() {
                return getColor();
            }
        });
        colorRect.setEffect(new DropShadow(3, 0, 1, Color.rgb(0, 0, 0, 0.8)));
        setGraphic(colorRect);
    }
   
    private static String getWebColor(Color color) {
        final int red = (int)(color.getRed()*255);
        final int green = (int)(color.getGreen()*255);
        final int blue = (int)(color.getBlue()*255);
        return "#" + String.format("%02X", red) +
                          String.format("%02X", green) +
                          String.format("%02X", blue);
    }
   
    public String getWebColor() {
        return getWebColor(getColor());
    }
}
TOP

Related Classes of com.fxexperience.javafx.scene.control.colorpicker.ColorPicker

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.