시소당
check box를 list로 가지는 combo box 입니다.
class JCheckComboBox extends JComboBox
{
private JList chklist;
private JLabel label = new JLabel("Select");
private Vector allList = new Vector();
public JCheckComboBox()
{
super();
setRenderer(new CheckComboRenderer());
}
public void setPopupVisible(boolean v)
{
if (v)
super.setPopupVisible(v);
else
{
if (chklist != null && chklist.isValid())
{
CheckableItem item = (CheckableItem)getSelectedItem();
item.setSelected(!item.isSelected());
int idx = getSelectedIndex();
Rectangle rect = chklist.getCellBounds(idx, idx);
chklist.repaint(rect);
}
}
}
public void addItem(Object obj)
{
allList.add((String)obj);
super.addItem(new CheckableItem((String)obj));
}
public void setSelectedItem(String str[])
{
for (int i = 0; i < str.length; i++)
{
int idx = allList.indexOf(str[i]);
if (idx < 0)
continue;
((CheckableItem)getItemAt(idx)).setSelected(true);
}
}
public Object[] getSelectedObjects()
{
Vector v = new Vector();
for (int i = 0; i < getItemCount(); i++)
{
CheckableItem item = (CheckableItem)getItemAt(i);
if (!item.isSelected())
continue;
v.add(item.toString());
}
Object[] objs = v.toArray();
return objs;
}
private class CheckComboRenderer extends JCheckBox implements ListCellRenderer
{
public Component getListCellRendererComponent(JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus)
{
chklist = list;
if (index < 0)
return label;
else
{
setSelected(((CheckableItem)value).isSelected());
setText(value.toString());
return this;
}
}
}
private class CheckableItem
{
private String str;
private boolean isSelected;
public CheckableItem(String str)
{
this(str, false);
}
public CheckableItem(String str, boolean b)
{
this.str = str;
isSelected = b;
}
public void setSelected(boolean b)
{
isSelected = b;
}
public boolean isSelected()
{
return isSelected;
}
public String toString()
{
return str;
}
}
}
출처 [JAVA] CheckComboBox|작성자 세리카