package com.revolsys.swing.field; import java.awt.Color; import javax.swing.BorderFactory; import javax.swing.JColorChooser; import org.jdesktop.swingx.JXColorSelectionButton; import com.revolsys.swing.EventQueue; import com.revolsys.swing.component.ColorAlphaPanel; import com.revolsys.swing.component.ValueField; public class ColorChooserField extends ValueField { private static final long serialVersionUID = 1L; private final JXColorSelectionButton colorButton = new JXColorSelectionButton(); public ColorChooserField(final String fieldName, final Color color) { super(fieldName, color); EventQueue.addPropertyChange(this.colorButton, "background", () -> updateFieldValue()); setBorder(BorderFactory.createEmptyBorder(0, 3, 3, 0)); add(this.colorButton); final JColorChooser chooser = this.colorButton.getChooser(); chooser.addChooserPanel(new ColorAlphaPanel()); setFieldValue(color); } @Override public boolean setFieldValue(final Object color) { if (this.colorButton != null) { this.colorButton.setBackground((Color)color); } return super.setFieldValue(color); } @Override public void updateFieldValue() { setFieldValue(this.colorButton.getBackground()); } }