X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjavajs%2Fasync%2FAsyncColorChooser.java;fp=src%2Fjavajs%2Fasync%2FAsyncColorChooser.java;h=2474833aee9a3423882d8b48febc631439c8429f;hb=586ade46bdcd05ff028a1cff82c3c527326d28ec;hp=0000000000000000000000000000000000000000;hpb=adcef27f5747b4e70e89a56c3735bc3afb8ce9bf;p=jalview.git diff --git a/src/javajs/async/AsyncColorChooser.java b/src/javajs/async/AsyncColorChooser.java new file mode 100644 index 0000000..2474833 --- /dev/null +++ b/src/javajs/async/AsyncColorChooser.java @@ -0,0 +1,67 @@ +package javajs.async; + +import java.awt.Color; +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; + +import javax.swing.JColorChooser; +import javax.swing.plaf.UIResource; + +/** + * A simple Asynchronous file chooser for JavaScript; synchronous with Java. + * + * Allows two modes -- using an ActionListener (setAction(ActionListener) or constructor(ActionListener)) + * + * @author Bob Hanson + */ + +public class AsyncColorChooser implements PropertyChangeListener { + + private ActionListener listener; + private Color selectedColor; + + public void showDialog(Component component, String title, Color initialColor, ActionListener listener) { + setListener(listener); + process(JColorChooser.showDialog(component, title, initialColor)); + unsetListener(); + } + + public Color getSelectedColor() { + return selectedColor; + } + + + @Override + public void propertyChange(PropertyChangeEvent evt) { + // JavaScript only + Color c = (Color) evt.getNewValue(); + + switch (evt.getPropertyName()) { + case "SelectedColor": + process(c); + break; + } + } + + private void setListener(ActionListener a) { + listener = a; + /** @j2sNative Clazz.load("javax.swing.JColorChooser");javax.swing.JColorChooser.listener = this */ + } + + private void unsetListener() { + /** @j2sNative javax.swing.JColorChooser.listener = null */ + } + + + + private void process(Color c) { + if (c instanceof UIResource) + return; + selectedColor = c; + listener.actionPerformed(new ActionEvent(this, c == null ? 0 : c.getRGB(), c == null ? null : c.toString())); + } + +}