package moduls.frm.children; import java.awt.*; import java.awt.event.*; import java.util.Arrays; import java.util.LinkedList; import javax.swing.*; public class CheckCombo extends Component implements ActionListener { //Fields private String[] ids; private Boolean[] values; private CheckComboStore[] StoredValues; private JComboBox combo; //Constructor public CheckCombo(String[] ids){ //create components //import motif names this.ids = ids; //default: set all motifs to unselected values = new Boolean[ids.length]; Arrays.fill(values, false); //initialize stored values array StoredValues = new CheckComboStore[ids.length]; //create stored data for every array for(int j = 0; j < ids.length; j++) StoredValues[j] = new CheckComboStore(ids[j], values[j]); combo = new JComboBox(StoredValues); combo.setRenderer(new CheckComboRenderer()); combo.addActionListener(this); } public JPanel getContent() { JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); panel.add(combo, BorderLayout.NORTH); return panel; } public void actionPerformed(ActionEvent e) { JComboBox cb = (JComboBox)e.getSource(); CheckComboStore store = (CheckComboStore)cb.getSelectedItem(); CheckComboRenderer ccr = (CheckComboRenderer)cb.getRenderer(); ccr.checkBox.setSelected((store.state = !store.state)); } public Boolean[] getValues() { return values; } public void setValues(Boolean[] values) { this.values = values; } public String[] getIds() { return ids; } public void setIds(String[] ids) { this.ids = ids; } public CheckComboStore[] getStoredValues() { return StoredValues; } public void setStoredValues(CheckComboStore[] storedValues) { StoredValues = storedValues; } public LinkedList<String> getSelectedMotifs(){ LinkedList<String> SelectedMotifs = new LinkedList<String>(); for (CheckComboStore CCS : StoredValues){ if (CCS.state){ SelectedMotifs.add(CCS.id); } } return SelectedMotifs; } } /** adapted from comment section of ListCellRenderer api */ class CheckComboRenderer implements ListCellRenderer { JCheckBox checkBox; public CheckComboRenderer() { checkBox = new JCheckBox(); } public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { CheckComboStore store = (CheckComboStore)value; checkBox.setText(store.id); checkBox.setSelected(((Boolean)store.state).booleanValue()); checkBox.setBackground(isSelected ? Color.BLUE : Color.LIGHT_GRAY); checkBox.setForeground(isSelected ? Color.LIGHT_GRAY : Color.BLACK); return checkBox; } } class CheckComboStore { String id; Boolean state; public CheckComboStore(String id, Boolean state) { this.id = id; this.state = state; } }