List permits the selection of multiple items (Choice allows single selection). Programmer prefers List when checkboxes are many to display (in case of Choice, when radio buttons are many to display). List adds a scrollbar with which items can be scrolled and seen. List can be designed for single selection or multiple selection (Java AWT List Multiple Single Selection).
In general, all GUI components generate only one event. But in contrary, List can generate two events. For single clicks, it generates ItemEvent handled by ItemListener and for double clicks, ActionEvent handled by ActionListener. These two types of clicks can be used as in Window Explorer; single click selects the file and double click opens the file.
Choice Vs. List
Following table gives clear cut differences with Choice.
Choice | List |
---|---|
Used for single selection only | Used for single and multiple selections |
Generally gives dropdown list | Gives scrollable list of items |
Generally, scrollbar is not required | Generally scrollbar is seen |
Generates only one event – ItemEvent | Generates two events – ItemEvent and ActionEvent |
Replacement to radio buttons | Replacement to radio buttons or checkboxes |
Following is the class signature
public class List extends Component implements ItemSelectable, Accessible
Example on Java AWT List – Preparing Super Bazar Bill
We have seen earlier in Choice component, the creation of applets with GUI. This program is also meant to practice GUI with applets. As a practice, you can change this program into an application. In the following applet, the items, selected by the user, in a super bazar are tabulated and made in a bill format.
import java.awt.*;
import java.awt.event.*;
public class SuperBazarBilling extends Frame implements ActionListener
{
List bazar;
double rates[] = { 80.50, 75.60, 150.25, 39.99, 120.25, 90.80, 50.00 };
public SuperBazarBilling()
{ // create List object
bazar = new List(5, true);
// populate list
bazar.add("Gloves");
bazar.add("Socks");
bazar.add("Waist Belt");
bazar.add("Cap");
bazar.add("Wallet");
bazar.add("Pen Set");
bazar.add("Napkins");
// register with listener
bazar.addActionListener(this);
// window closing using adapter
PleaseClose pc = new PleaseClose();
addWindowListener(pc);
// add to frame
add(bazar, "North");
// frame creation trio
setTitle("Scrollable List");
setSize(300, 350);
setVisible(true);
} // override the abstract method of AL
public void actionPerformed(ActionEvent e)
{
repaint();
}
public void paint(Graphics g)
{
String itemNames[] = bazar.getSelectedItems();
int itemIndexes[] = bazar.getSelectedIndexes();
int y = 170;
double totalAmount = 0.0;
g.drawString("Sl.No. Item Name Item code Rate", 50, 150);
for(int i = 0; i < itemNames.length; i++, y += 25)
{
g.drawString((i + 1) + " " + itemNames[i] + " " + itemIndexes[i] + " " + rates[itemIndexes[i]], 50, y);
totalAmount += rates[ itemIndexes[i]];
}
g.setColor(Color.blue);
g.drawString("Total Bill Rs." + totalAmount, 50, y += 25);
g.setColor(Color.magenta);
g.drawString("Thnaks Visit Again.", 50, y += 25);
g.setColor(Color.red);
g.drawString("Comments Book Available", 50, y += 25);
}
public static void main(String args[])
{
new SuperBazarBilling();
}
}
class PleaseClose extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}

The class implements ActionListener and thereby double clicks on the items only work.
what if i want to print the the items selected in the list to be displayed in order in which I selected.?
Items u selected comes in the order they are added. The items selected are generally used for billing etc. where order is not important. If you want write extra code of storing them in a DS or array like that.
It is given in the posting itself. paint() is called automatically in two circumstances a) when the first time frame is created and b) when the user resizes the frame by catching and dragging the border of the frame. If the programmer would like to call paint() method in the code, he should call repaint() and not paint().
In the actionPerformed() we called repaint() method as the actual code of drawing on the frame exists in paint() method.