Setting ComboBox Editor and ComboBox Renderer : JComboBox « Swing « Java Tutorial






Setting ComboBox Editor and ComboBox Renderer
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ComboBoxEditor;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.border.LineBorder;
import javax.swing.event.EventListenerList;

class ColorComboBoxEditor implements ComboBoxEditor {
  final protected JButton editor;

  protected EventListenerList listenerList = new EventListenerList();

  public ColorComboBoxEditor(Color initialColor) {
    editor = new JButton("");
    editor.setBackground(initialColor);
    ActionListener actionListener = new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        Color currentBackground = editor.getBackground();
        Color color = JColorChooser.showDialog(editor, "Color Chooser", currentBackground);
        if ((color != null) && (currentBackground != color)) {
          editor.setBackground(color);
          fireActionEvent(color);
        }
      }
    };
    editor.addActionListener(actionListener);
  }

  public void addActionListener(ActionListener l) {
    listenerList.add(ActionListener.class, l);
  }

  public Component getEditorComponent() {
    return editor;
  }

  public Object getItem() {
    return editor.getBackground();
  }

  public void removeActionListener(ActionListener l) {
    listenerList.remove(ActionListener.class, l);
  }

  public void selectAll() {
  }

  public void setItem(Object newValue) {
    if (newValue instanceof Color) {
      Color color = (Color) newValue;
      editor.setBackground(color);
    } else {
      try {
        Color color = Color.decode(newValue.toString());
        editor.setBackground(color);
      } catch (NumberFormatException e) {
      }
    }
  }

  protected void fireActionEvent(Color color) {
    Object listeners[] = listenerList.getListenerList();
    for (int i = listeners.length - 2; i >= 0; i -= 2) {
      if (listeners[i] == ActionListener.class) {
        ActionEvent actionEvent = new ActionEvent(editor, ActionEvent.ACTION_PERFORMED, color
            .toString());
        ((ActionListener) listeners[i + 1]).actionPerformed(actionEvent);
      }
    }
  }
}

class ColorCellRenderer implements ListCellRenderer {
  protected DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();

  // Width doesn't matter as the combo box will size
  private final static Dimension preferredSize = new Dimension(0, 20);

  public Component getListCellRendererComponent(JList list, Object value, int index,
      boolean isSelected, boolean cellHasFocus) {
    JLabel renderer = (JLabel) defaultRenderer.getListCellRendererComponent(list, value, index,
        isSelected, cellHasFocus);
    if (value instanceof Color) {
      renderer.setBackground((Color) value);
    }
    if(cellHasFocus || isSelected){
      renderer.setBorder(new LineBorder(Color.DARK_GRAY));
    }else{
      renderer.setBorder(null);
    }
    
    renderer.setPreferredSize(preferredSize);
    return renderer;
  }
}

public class ColorComboBoxEditorRendererDemo {
  public static void main(String args[]) {
    Color colors[] = { Color.BLACK, Color.BLUE, Color.GREEN, Color.RED, Color.WHITE, Color.YELLOW };
    JFrame frame = new JFrame("Color JComboBox");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    final JComboBox comboBox = new JComboBox(colors);
    comboBox.setEditable(true);
    comboBox.setRenderer(new ColorCellRenderer());
    Color color = (Color) comboBox.getSelectedItem();

    ComboBoxEditor editor = new ColorComboBoxEditor(color);
    comboBox.setEditor(editor);
    frame.add(comboBox, BorderLayout.NORTH);

    final JLabel label = new JLabel();
    label.setOpaque(true);
    label.setBackground((Color) comboBox.getSelectedItem());
    frame.add(label, BorderLayout.CENTER);

    ActionListener actionListener = new ActionListener() {
      public void actionPerformed(ActionEvent actionEvent) {
        Color selectedColor = (Color) comboBox.getSelectedItem();
        label.setBackground(selectedColor);
      }
    };
    comboBox.addActionListener(actionListener);

    frame.setSize(300, 200);
    frame.setVisible(true);
  }
}








14.12.JComboBox
14.12.1.Creating JComboBox Components
14.12.2.Add Items to JComboBoxAdd Items to JComboBox
14.12.3.Get selected Item from JComboBoxGet selected Item from JComboBox
14.12.4.Getting and Setting the Selected Item in a JComboBox Component
14.12.5.Editable JComboBox
14.12.6.If the combobox is editable, the new value can be any value
14.12.7.Listen to JComboBox with ItemListenerListen to JComboBox with ItemListener
14.12.8.Sharing the Data Model between two JComboBoxesSharing the Data Model between two JComboBoxes
14.12.9.Sharing the Data Model for a JComboBox and JListSharing the Data Model for a JComboBox and JList
14.12.10.Editing JComboBox ElementsEditing JComboBox Elements
14.12.11.Listening to Keyboard Events with a KeySelectionManager
14.12.12.A Color Combo Box EditorA Color Combo Box Editor
14.12.13.Setting ComboBox Editor and ComboBox RendererSetting ComboBox Editor and ComboBox Renderer
14.12.14.Combobox cell rendererCombobox cell renderer
14.12.15.Custom JComboBox Pop-up ButtonCustom JComboBox Pop-up Button
14.12.16.JComboBox Using the Custom ModelJComboBox Using the Custom Model
14.12.17.Get Model from JComboBox and set it to JList
14.12.18.Adding and Removing an Item in a JComboBox Component
14.12.19.Add an item to the end of the list
14.12.20.Add an item after the first item
14.12.21.Getting the Items in a JComboBox Component
14.12.22.Remove first item
14.12.23.Remove the last item
14.12.24.Remove all items
14.12.25.Determining When the Menu of a JComboBox Component Is Displayed
14.12.26.Listening for Action Events from a JComboBox Component
14.12.27.Listening for Changes to the Selected Item in a JComboBox Component
14.12.28.Setting the Number of Visible Items in the Menu of a JComboBox Component
14.12.29.Displaying the Menu in a JComboBox Component Using a Keystroke If the Selected Item Is Not Unique
14.12.30.Determining If the Menu of a JComboBox Component Is Visible
14.12.31.Displaying the Menu in a JComboBox Component Using a Keystroke
14.12.32.Selecting an Item in a JComboBox Component with Multiple Keystrokes
14.12.33.Customizing a JComboBox Look and Feel