public class MyComboBox extends JComboBox implements ActionListener { 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; } }
###CheckListCellRenderer.java###
public class CheckListCellRenderer extends JCheckBox implements ListCellRenderer, Serializable { 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; } }
###CheckValue.java###
public class CheckValue { public boolean bolValue = false; public String value = null; public CheckValue() { } public CheckValue(boolean bolValue, String value) { this.bolValue = bolValue; this.value = value; } }