Java JColorChooser .addChooserPanel (AbstractColorChooserPanel panel)

Syntax

JColorChooser.addChooserPanel(AbstractColorChooserPanel panel) has the following syntax.

public void addChooserPanel(AbstractColorChooserPanel panel)

Example

In the following code shows how to use JColorChooser.addChooserPanel(AbstractColorChooserPanel panel) method.


//from w  w  w.j av a  2  s . c o  m
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.Icon;
import javax.swing.JColorChooser;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.colorchooser.AbstractColorChooserPanel;
import javax.swing.colorchooser.ColorSelectionModel;

public class Main {

  public static void main(String[] a) {
    final JColorChooser colorChooser = new JColorChooser();
    SystemColorChooserPanel newChooser = new SystemColorChooserPanel();
    colorChooser.addChooserPanel(newChooser);

    ActionListener okActionListener = new ActionListener() {
      public void actionPerformed(ActionEvent actionEvent) {
        System.out.println(colorChooser.getColor());
      }
    };

    ActionListener cancelActionListener = new ActionListener() {
      public void actionPerformed(ActionEvent actionEvent) {
        System.out.println("Cancel");
      }
    };

    final JDialog dialog = JColorChooser.createDialog(null, "Change Button Background", true,
        colorChooser, okActionListener, cancelActionListener);
    dialog.setVisible(true);
  }
}

class SystemColorChooserPanel extends AbstractColorChooserPanel implements ItemListener {

  JComboBox comboBox;

  String labels[] = { "BLACK", "BLUE", "CYAN"};

  Color colors[] = { Color.BLACK, Color.BLUE, Color.CYAN};

  private void setColor(Color newColor) {
    int position = findColorPosition(newColor);
    comboBox.setSelectedIndex(position);
  }

  private int findColorLabel(Object label) {
    String stringLabel = label.toString();
    int position = -1;
    for (int i = 0, n = labels.length; i < n; i++) {
      if (stringLabel.equals(labels[i])) {
        position = i;
        break;
      }
    }
    return position;
  }

  private int findColorPosition(Color color) {
    int position = colors.length - 1;
    int colorRGB = color.getRGB();
    for (int i = 0, n = colors.length; i < n; i++) {
      if ((colors[i] != null) && (colorRGB == colors[i].getRGB())) {
        position = i;
        break;
      }
    }
    return position;
  }

  public void itemStateChanged(ItemEvent itemEvent) {
    int state = itemEvent.getStateChange();
    if (state == ItemEvent.SELECTED) {
      int position = findColorLabel(itemEvent.getItem());
      if ((position != -1) && (position != labels.length - 1)) {
        ColorSelectionModel selectionModel = getColorSelectionModel();
        selectionModel.setSelectedColor(colors[position]);
      }
    }
  }

  public String getDisplayName() {
    return "SystemColor";
  }

  public Icon getSmallDisplayIcon() {
    return new MyIcon(Color.BLUE);
  }

  public Icon getLargeDisplayIcon() {
    return new MyIcon(Color.GREEN);
  }

  protected void buildChooser() {
    comboBox = new JComboBox(labels);
    comboBox.addItemListener(this);
    add(comboBox);
  }

  public void updateChooser() {
    Color color = getColorFromModel();
    setColor(color);
  }
}

class MyIcon implements Icon {
  Color myColor;

  public MyIcon(Color myColor) {
    this.myColor = myColor;
  }

  public int getIconWidth() {
    return 16;
  }

  public int getIconHeight() {
    return 16;
  }

  public void paintIcon(Component c, Graphics g, int x, int y) {
    g.setColor(myColor);
    g.drawRect(0, 0, 16, 16);
  }
}