package com.vci.client.framework.rightConfig.operate; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.Serializable; import java.util.Vector; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JList; import javax.swing.ListCellRenderer; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.border.Border; import javax.swing.border.EmptyBorder; /** * 用于多选的JCombobox * @author liudi * */ public class MyComboBox extends JComboBox implements ActionListener { /** * */ private static final long serialVersionUID = 1L; public MyComboBox() { addItem(new CheckValue(false, "Select All")); this.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { itemSelected(); } }); } private void itemSelected() { if (getSelectedItem() instanceof CheckValue) { if (getSelectedIndex() == 0) { selectedAllItem(); } else { CheckValue jcb = (CheckValue) getSelectedItem(); jcb.bolValue = (!jcb.bolValue); setSelectedIndex(getSelectedIndex()); } SwingUtilities.invokeLater(new Runnable() { public void run() { showPopup(); } }); } } private void selectedAllItem() { boolean bl = false; for (int i = 0; i < getItemCount(); i++) { CheckValue jcb = (CheckValue) getItemAt(i); if (i == 0) { bl = !jcb.bolValue; } jcb.bolValue = (bl); } setSelectedIndex(0); } public Vector getComboVc() { Vector vc = new Vector(); for (int i = 1; i < getItemCount(); i++) { CheckValue jcb = (CheckValue) getItemAt(i); if (jcb.bolValue) { vc.add(jcb.value); } } return vc; } } class CheckListCellRenderer extends JCheckBox implements ListCellRenderer, Serializable { /** * */ private static final long serialVersionUID = -480009971086827966L; protected static Border noFocusBorder; /** * Constructs a default renderer object for an item in a list. */ public CheckListCellRenderer() { super(); if (noFocusBorder == null) { noFocusBorder = new EmptyBorder(1, 1, 1, 1); } setOpaque(true); setBorder(noFocusBorder); } public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { setComponentOrientation(list.getComponentOrientation()); if (isSelected) { setBackground(list.getSelectionBackground()); setForeground(list.getSelectionForeground()); } else { setBackground(list.getBackground()); setForeground(list.getForeground()); } if (value instanceof CheckValue) { CheckValue ckValue = (CheckValue) value; this.setText(ckValue.value == null ? "" : ckValue.value); this.setSelected(ckValue.bolValue); } setEnabled(list.isEnabled()); setFont(list.getFont()); setBorder((cellHasFocus) ? UIManager .getBorder("List.focusCellHighlightBorder") : noFocusBorder); return this; } } class CheckValue { public boolean bolValue = false; public String value = null; public CheckValue() { } public CheckValue(boolean bolValue, String value) { this.bolValue = bolValue; this.value = value; } }