From 055679f797ca8e5d52d9eb42af9951b8c83b15df Mon Sep 17 00:00:00 2001 From: gmungoc Date: Tue, 3 Jul 2018 15:59:01 +0100 Subject: [PATCH 1/1] JAL-3032 revised colour picker, now with ActionListener --- src/jalview/gui/FeatureTypeSettings.java | 40 +++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/src/jalview/gui/FeatureTypeSettings.java b/src/jalview/gui/FeatureTypeSettings.java index b973708..0f997bf 100644 --- a/src/jalview/gui/FeatureTypeSettings.java +++ b/src/jalview/gui/FeatureTypeSettings.java @@ -58,6 +58,7 @@ import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JColorChooser; import javax.swing.JComboBox; +import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JRadioButton; @@ -833,17 +834,38 @@ public class FeatureTypeSettings extends JalviewDialog return colourByPanel; } - private void showColourChooser(JPanel colourPanel, String key) + /** + * Shows a colour chooser dialog, and if a selection is made, updates the + * colour of the given panel + * + * @param colourPanel + * the panel whose background colour is being picked + * @param key + * message bundle key for the dialog title + */ + private void showColourChooser(final JPanel colourPanel, String key) { - Color col = JColorChooser.showDialog(this, - MessageManager.getString(key), colourPanel.getBackground()); - if (col != null) + // TODO 'final' is (currently) required here for SwingJS to work + final JColorChooser colorChooser = new JColorChooser(); + colorChooser.setColor(colourPanel.getBackground()); + + ActionListener listener = new ActionListener() { - colourPanel.setBackground(col); - colourPanel.setForeground(col); - } - colourPanel.repaint(); - colourChanged(true); + @Override + public void actionPerformed(ActionEvent e) + { + Color col = colorChooser.getColor(); + colourPanel.setBackground(col); + colourPanel.setForeground(col); + colourPanel.repaint(); + colourChanged(true); + } + }; + + JDialog dialog = JColorChooser.createDialog(this, + MessageManager.getString(key), true, colorChooser, listener, + null); + dialog.setVisible(true); } /** -- 1.7.10.2