import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
public class CheckBoxList extends JList {
public CheckBoxList(Vector data) {
super(data);
CheckListCellRenderer renderer = new CheckListCellRenderer();
setCellRenderer(renderer);
setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
CheckListener lst = new CheckListener(this);
addMouseListener(lst);
}
void sortList() {
ListModel model = getModel();
int numItems = model.getSize();
Vector a = new Vector();
for (int i=0;i<numItems;i++)
{
if ( ((JCheckBox)model.getElementAt(i)).isSelected() )
a.add((JCheckBox)model.getElementAt(i));
}
for (int i=0;i<numItems;i++)
{
if ( !((JCheckBox)model.getElementAt(i)).isSelected())
a.add((JCheckBox)model.getElementAt(i));
}
setListData(a);
revalidate();
}
}
class CheckListCellRenderer extends JCheckBox implements ListCellRenderer {
protected static Border m_noFocusBorder = new EmptyBorder(1, 1, 1, 1);
public CheckListCellRenderer() {
super();
}
public Component getListCellRendererComponent(JList list,
Object value, int index, boolean isSelected, boolean cellHasFocus)
{
JCheckBox jcb = (JCheckBox)value;
jcb.setBackground(isSelected ? list.getSelectionBackground() :
list.getBackground());
jcb.setForeground(jcb.isSelected() ? Color.blue : Color.red);
jcb.setFont(list.getFont());
jcb.setBorder((cellHasFocus) ?
UIManager.getBorder("List.focusCellHighlightBorder")
: m_noFocusBorder);
return jcb;
}
}
class CheckListener implements MouseListener{
protected CheckBoxList m_parent;
public CheckListener(CheckBoxList parent) {
m_parent = parent;
}
public void mouseClicked(MouseEvent e) {
if(e.getX() < 20){
int index = m_parent.getSelectedIndex();
if (index < 0)
return;
JCheckBox jcb = (JCheckBox)m_parent.getSelectedValue();
if(jcb.isSelected())
jcb.setSelected(false);
else
jcb.setSelected(true);
m_parent.repaint();
m_parent.sortList();
}
else{
String dbName = ((JCheckBox)m_parent.getSelectedValue()).getText();
IRRj.optWin.serverLabel.setText( IRRj.gr.getSockInfo() );
IRRj.optWin.dbLabel.setText( dbName );
IRRj.gr.getNewRequest("!j"+dbName+"\n");
if(IRRj.gr.getBuffer() != null){
StringTokenizer strtok = new StringTokenizer(IRRj.gr.getBuffer(), ":-");
strtok.nextToken();
strtok.nextToken();
IRRj.optWin.startSerial.setText( strtok.nextToken().trim() );
IRRj.optWin.endSerial.setText( strtok.nextToken().trim() );
}
else{
IRRj.optWin.startSerial.setText( "<error>" );
IRRj.optWin.endSerial.setText( "<error>" );
}
}
}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
}
syntax highlighted by Code2HTML, v. 0.9.1