/*
* Copyright 2001-2008 Geert Bevin <gbevin[remove] at uwyn dot com>
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: JKeySelectableList.java 3918 2008-04-14 17:35:35Z gbevin $
*/
package com.uwyn.rife.swing;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;
import javax.swing.JList;
import javax.swing.ListModel;
public class JKeySelectableList extends JList implements KeyListener
{
private static final long serialVersionUID = -9040186688203231054L;
public JKeySelectableList()
{
super();
addKeyListener(this);
}
public JKeySelectableList(Vector items)
{
super(items);
addKeyListener(this);
}
public void keyReleased(KeyEvent event)
{
}
public void keyPressed(KeyEvent event)
{
}
public void keyTyped(KeyEvent event)
{
selectWithKeyChar(event.getKeyChar());
}
public boolean selectWithKeyChar(char keyChar)
{
int index = -1;
index = selectionForKey(keyChar, getModel());
if (-1 != index)
{
setSelectedIndex(index);
ensureIndexIsVisible(index);
return true;
}
else
{
return false;
}
}
public int selectionForKey(char key, ListModel listModel)
{
int i = 0;
int size = 0;
int current_selection = -1;
Object selected_item = listModel.getElementAt(getSelectedIndex());
String value = null;
String pattern = null;
size = listModel.getSize();
if (null != selected_item)
{
selected_item = selected_item.toString();
for (i = 0; i < size; i++)
{
if (selected_item.equals(listModel.getElementAt(i).toString()))
{
current_selection = i;
break;
}
}
}
pattern = ("" + key).toLowerCase();
key = pattern.charAt(0);
for (i = ++current_selection; i < size; i++)
{
value = listModel.getElementAt(i).toString().toLowerCase();
if (value.length() > 0 &&
key == value.charAt(0))
{
return i;
}
}
for (i = 0; i < current_selection; i++)
{
value = listModel.getElementAt(i).toString().toLowerCase();
if (value.length() > 0 &&
key == value.charAt(0))
{
return i;
}
}
return -1;
}
}