1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| /**
* @author leminipouce
* This class displays a checkbox and a text side-by-side in the list where
* it is used as a renderer.
*/
public class DropDownListRenderer extends JCheckBox implements ListCellRenderer, MouseListener {
/** Usefull for serialization */
private static final long serialVersionUID = -156435997361540224L;
private int attributeIndex=0;
private JPanel filterPanel=null;
public DropDownListRenderer(int index, JPanel panel)
{
super();
attributeIndex=index; //The index corresponding to this attribute list
filterPanel=panel; //The panel where the JList is displayed
}
public Component getListCellRendererComponent(
JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
boolean[][] userSelection = MySoft.getModel().getNominalAttributeUserSelection();
if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
}else{
setBackground(list.getBackground());
setForeground(list.getForeground());
}
//Check the checkbox if the filter has been selected
if(!userSelection[attributeIndex][index])
setSelected(false);
else
setSelected(true);
setText((value == null) ? "Empty" : value.toString());
setEnabled(list.isEnabled());
setFont(list.getFont());
return this;
}
public void mouseClicked(MouseEvent e)
{
MySoft.getModel().changeNominalAttributeUserSelection(attributeIndex,((JList)e.getSource()).getSelectedIndex());
getListCellRendererComponent((JList)e.getSource(),this.getText(),((JList)e.getSource()).getSelectedIndex(),true,true);
}
public void mousePressed(MouseEvent arg0)
{}
public void mouseReleased(MouseEvent arg0)
{}
public void mouseEntered(MouseEvent e)
{
JList source = (JList)e.getSource();
source.setVisibleRowCount(6);
filterPanel.updateUI();
}
public void mouseExited(MouseEvent e)
{
JList source = (JList)e.getSource();
source.setVisibleRowCount(1);
filterPanel.updateUI();
}
} |
Partager