X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FJalviewColourChooser.java;fp=src%2Fjalview%2Fgui%2FJalviewColourChooser.java;h=6dc8a2bf10e4424164e5d806d06b3e32e3821784;hb=4f30214e8098748469c6a4269ac2ed6c5750e4b0;hp=0000000000000000000000000000000000000000;hpb=9dabc02511e3a334a5749a504f57f69d6c9017bd;p=jalview.git diff --git a/src/jalview/gui/JalviewColourChooser.java b/src/jalview/gui/JalviewColourChooser.java new file mode 100644 index 0000000..6dc8a2b --- /dev/null +++ b/src/jalview/gui/JalviewColourChooser.java @@ -0,0 +1,73 @@ +package jalview.gui; + +import java.awt.Color; +import java.awt.Component; +import java.awt.event.ActionListener; + +import javax.swing.JColorChooser; +import javax.swing.JComponent; +import javax.swing.JDialog; + +/** + * A helper class that shows a JColorChooser and passes the selected colour back + * to a listener + */ +public class JalviewColourChooser +{ + public interface ColourChooserListener + { + void colourSelected(Color c); + + default void cancel() {}; + } + + /** + * Shows a colour chooser dialog with the given parent component, title, and + * (optionally) initially selected colour. The chosen colour is passed back to + * the listener. There is no action if the dialog is cancelled. + * + * @param parent + * @param title + * @param initialColour + * @param listener + */ + public static void showColourChooser(Component parent, String title, + Color initialColour, ColourChooserListener listener) + { + JColorChooser colorChooser = new JColorChooser(); + if (initialColour != null) + { + colorChooser.setColor(initialColour); + } + ActionListener onChoose = evt -> listener.colourSelected(colorChooser.getColor()); + ActionListener onCancel = evt -> listener.cancel(); + JDialog dialog = JColorChooser.createDialog(parent, title, true, colorChooser, + onChoose, onCancel); + dialog.setVisible(true); + } + + /** + * A convenience method that shows a colour chooser, with initial colour the + * background of the given 'paintable', and updates its background colour and + * repaints it after a colour selection is made + * + * @param parent + * @param title + * @param paintable + */ + public static void showColourChooser(Component parent, String title, + JComponent paintable) + { + ColourChooserListener listener = new ColourChooserListener() + { + @Override + public void colourSelected(Color c) + { + paintable.setBackground(c); + paintable.repaint(); + } + }; + JalviewColourChooser.showColourChooser(parent, title, + paintable.getBackground(), listener); + } +}