public void actionPerformed(ActionEvent e) {
int lead = list.getLeadSelectionIndex();
int max = list.getModel().getSize() - 1;
DefaultListSelectionModel selModel = (DefaultListSelectionModel)list.getSelectionModel();
String command = e.getActionCommand();
// Do nothing if list is empty
if (max == -1)
return;
if (command.equals("selectNextRow"))
{
selectNextIndex();
}
else if (command.equals("selectPreviousRow"))
{
selectPreviousIndex();
}
else if (command.equals("clearSelection"))
{
list.clearSelection();
}
else if (command.equals("selectAll"))
{
list.setSelectionInterval(0, max);
// this next line is to restore the lead selection index to the old
// position, because select-all should not change the lead index
list.addSelectionInterval(lead, lead);
}
else if (command.equals("selectLastRow"))
{
list.setSelectedIndex(list.getModel().getSize() - 1);
}
else if (command.equals("selectLastRowChangeLead"))
{
selModel.moveLeadSelectionIndex(list.getModel().getSize() - 1);
}
else if (command.equals("scrollDownExtendSelection"))
{
int target;
if (lead == list.getLastVisibleIndex())
{
target = Math.min
(max, lead + (list.getLastVisibleIndex() -
list.getFirstVisibleIndex() + 1));
}
else
target = list.getLastVisibleIndex();
selModel.setLeadSelectionIndex(target);
}
else if (command.equals("scrollDownChangeLead"))
{
int target;
if (lead == list.getLastVisibleIndex())
{
target = Math.min
(max, lead + (list.getLastVisibleIndex() -
list.getFirstVisibleIndex() + 1));
}
else
target = list.getLastVisibleIndex();
selModel.moveLeadSelectionIndex(target);
}
else if (command.equals("scrollUpExtendSelection"))
{
int target;
if (lead == list.getFirstVisibleIndex())
{
target = Math.max
(0, lead - (list.getLastVisibleIndex() -
list.getFirstVisibleIndex() + 1));
}
else
target = list.getFirstVisibleIndex();
selModel.setLeadSelectionIndex(target);
}
else if (command.equals("scrollUpChangeLead"))
{
int target;
if (lead == list.getFirstVisibleIndex())
{
target = Math.max
(0, lead - (list.getLastVisibleIndex() -
list.getFirstVisibleIndex() + 1));
}
else
target = list.getFirstVisibleIndex();
selModel.moveLeadSelectionIndex(target);
}
else if (command.equals("selectNextRowExtendSelection"))
{
selModel.setLeadSelectionIndex(Math.min(lead + 1,max));
}
else if (command.equals("selectFirstRow"))
{
list.setSelectedIndex(0);
}
else if (command.equals("selectFirstRowChangeLead"))
{
selModel.moveLeadSelectionIndex(0);
}
else if (command.equals("selectFirstRowExtendSelection"))
{
selModel.setLeadSelectionIndex(0);
}
else if (command.equals("selectPreviousRowExtendSelection"))
{
selModel.setLeadSelectionIndex(Math.max(0,lead - 1));
}
else if (command.equals("scrollUp"))
{
int target;
if (lead == list.getFirstVisibleIndex())
{
target = Math.max
(0, lead - (list.getLastVisibleIndex() -
list.getFirstVisibleIndex() + 1));
}
else
target = list.getFirstVisibleIndex();
list.setSelectedIndex(target);
}
else if (command.equals("selectLastRowExtendSelection"))
{
selModel.setLeadSelectionIndex(list.getModel().getSize() - 1);
}
else if (command.equals("scrollDown"))
{
int target;
if (lead == list.getLastVisibleIndex())
{
target = Math.min
(max, lead + (list.getLastVisibleIndex() -
list.getFirstVisibleIndex() + 1));
}
else
target = list.getLastVisibleIndex();
list.setSelectedIndex(target);
}
else if (command.equals("selectNextRowChangeLead"))
{
if (selModel.getSelectionMode() != ListSelectionModel.MULTIPLE_INTERVAL_SELECTION)
selectNextIndex();
else
{
selModel.moveLeadSelectionIndex(Math.min(max, lead + 1));
}
}
else if (command.equals("selectPreviousRowChangeLead"))
{
if (selModel.getSelectionMode() != ListSelectionModel.MULTIPLE_INTERVAL_SELECTION)
selectPreviousIndex();
else
{
selModel.moveLeadSelectionIndex(Math.max(0, lead - 1));
}
}
else if (command.equals("addToSelection"))
{
list.addSelectionInterval(lead, lead);
}
else if (command.equals("extendTo"))
{
selModel.setSelectionInterval(selModel.getAnchorSelectionIndex(),
lead);
}
else if (command.equals("toggleAndAnchor"))
{
if (!list.isSelectedIndex(lead))
list.addSelectionInterval(lead, lead);
else
list.removeSelectionInterval(lead, lead);
selModel.setAnchorSelectionIndex(lead);
}
else
{
// DEBUG: uncomment the following line to print out
// key bindings that aren't implemented yet
// System.out.println ("not implemented: "+e.getActionCommand());
}
list.ensureIndexIsVisible(list.getLeadSelectionIndex());
}
|