Actual behavior:
Since Choice is a native component there are difficulties making it behave entirely as expected, but are there ways to do so? If you have any insights, workarounds or comments about this test page please contact Mickey Segal. A listing of many Java resources is at this link.
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class ChoiceKey2 extends Applet implements ItemListener{
MyChoice choice;
public void init()
{
choice = new MyChoice(this);
choice.addItem("a1 ");
choice.addItem("a2 ");
choice.addItem("b1 ");
choice.addItem("b2 ");
choice.addItem("c1 ");
add(choice);
}
public void itemStateChanged(ItemEvent ie)
{
choice.select(ie.getItem().toString());
}
} // END OF Class ChoiceKey2
class MyChoice extends Choice implements KeyListener{
ItemListener itemListener;
MyChoice(Container container)
{
super();
if (container != null)
addItemListener((ItemListener)container);
addKeyListener(this);
itemListener = AWTEventMulticaster.add(itemListener, (ItemListener)container);
}
public void keyPressed(KeyEvent ke){}
public void keyReleased(KeyEvent ke)
{
char keyChar = Character.toLowerCase(ke.getKeyChar());
if (keyChar < 'a' || keyChar > 'z') return;
int itemCount = getItemCount();
for (int i=0; i<itemCount; i++)
{
if (getItem(i).toLowerCase().charAt(0)
== keyChar)
{
select(i);
break;
}
}
itemListener.itemStateChanged(
new ItemEvent(this, ItemEvent.ITEM_STATE_CHANGED,
getSelectedItem(), ItemEvent.SELECTED));
}
public void keyTyped(KeyEvent ke){}
} // END OF Class MyChoice