package de.lighti.components.batch; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.List; import javax.swing.DefaultListModel; import javax.swing.JCheckBox; import javax.swing.JList; import javax.swing.ListSelectionModel; public class CheckBoxList extends JList<CheckBoxListEntry> { /** * */ private static final long serialVersionUID = 7046275812111622580L; public CheckBoxList() { super(); setModel( new DefaultListModel<CheckBoxListEntry>() ); setCellRenderer( new CheckboxCellRenderer() ); addMouseListener( new MouseAdapter() { @Override public void mousePressed( MouseEvent e ) { final int index = locationToIndex( e.getPoint() ); if (index != -1) { final JCheckBox checkbox = getModel().getElementAt( index ); final boolean old = checkbox.isSelected(); checkbox.setSelected( !old ); repaint(); CheckBoxList.this.firePropertyChange( getModel().getElementAt( index ).getValue(), old, !old ); } } } ); setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); } public int[] getCheckedIdexes() { final java.util.List<Integer> list = new java.util.ArrayList<Integer>(); final DefaultListModel<CheckBoxListEntry> dlm = (DefaultListModel<CheckBoxListEntry>) getModel(); for (int i = 0; i < dlm.size(); ++i) { final JCheckBox checkbox = getModel().getElementAt( i ); if (checkbox.isSelected()) { list.add( new Integer( i ) ); } } final int[] indexes = new int[list.size()]; for (int i = 0; i < list.size(); ++i) { indexes[i] = list.get( i ).intValue(); } return indexes; } @Override public List<CheckBoxListEntry> getSelectedValuesList() { final java.util.List<CheckBoxListEntry> list = new java.util.ArrayList<CheckBoxListEntry>(); final DefaultListModel<CheckBoxListEntry> dlm = (DefaultListModel<CheckBoxListEntry>) getModel(); for (int i = 0; i < dlm.size(); ++i) { final CheckBoxListEntry checkbox = getModel().getElementAt( i ); if (checkbox.isSelected()) { list.add( checkbox ); } } return list; } }