Java by API/javax.swing.colorchooser/AbstractColorChooserPanel

Материал из Java эксперт
Перейти к: навигация, поиск

extends AbstractColorChooserPanel

import java.awt.Color;
import java.awt.ruponent;
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 MainClass {
  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);
  }
}