import java.awt.*; import java.awt.event.*; import java.util.LinkedList; import java.util.ListIterator; /** ListApplet: A demonstration of list operations using linked lists @author Greg Vogl last modified 2003-11-17 */ public class ListApplet extends java.applet.Applet { /** HandleButton: An inner class to handle button actions. */ public class HandleButton implements ActionListener { ListApplet app; TextField item; TextArea items; LinkedList list; ListIterator iterator; String operation; HandleButton (ListApplet app, TextField item, TextArea items, LinkedList list, ListIterator iterator, String operation) { this.app = app; this.item = item; this.items = items; this.operation = operation; this.list = list; this.iterator = iterator; } /** * Display list items in the text area. */ public void showList() { ListIterator i = list.listIterator(); items.append("List:\n"); while (i.hasNext()) items.append(i.next().toString() + "\n"); } /* * Handle button clicks. */ public void actionPerformed(ActionEvent e) { if (operation.equals("Add First")) { list.addFirst(item.getText()); } else if (operation.equals("Add Last")) { list.addLast(item.getText()); } else if (operation.equals("Remove First") && list.size() > 0) { item.setText(list.removeFirst().toString()); } else if (operation.equals("Remove Last") && list.size() > 0) { item.setText(list.removeLast().toString()); } else if (operation.equals("Get First") && list.size() > 0) { item.setText(list.getFirst().toString()); } else if (operation.equals("Get Last") && list.size() > 0) { item.setText(list.getLast().toString()); } else if (operation.equals("Add")) { iterator.add(item.getText()); } else if (operation.equals("Remove")) { iterator.remove(); } else if (operation.equals("Previous") && iterator.hasPrevious()) { item.setText(iterator.previous().toString()); } else if (operation.equals("Next") && iterator.hasNext()) { item.setText(iterator.next().toString()); } showList(); app.repaint(); } } Button addf, addl, remf, reml, getf, getl, prevB, nextB, addB, remB; TextField item; TextArea items; LinkedList list; ListIterator iterator; /** * Create a button handled by HandleButton. */ public void makeButton(ListApplet app, Panel p, Button b, String text) { b = new Button(text); b.addActionListener(new HandleButton(app, item, items, list, iterator, text)); p.add(b); } /** * Create the interface and linked list. */ public void init() { setBackground(Color.white); setLayout(new FlowLayout()); list = new LinkedList(); iterator = list.listIterator(); // list items Panel p1 = new Panel(); p1.setLayout(new BorderLayout()); p1.add(new Label("Item"), BorderLayout.NORTH); item = new TextField(30); item.setEditable(true); p1.add(item, BorderLayout.CENTER); items = new TextArea(10, 30); items.setEditable(false); p1.add(items, BorderLayout.SOUTH); add(p1); // linked list buttons Panel p2 = new Panel(); p2.setLayout(new GridLayout(6,1)); makeButton(this, p2, addf, "Add First"); makeButton(this, p2, addl, "Add Last"); makeButton(this, p2, remf, "Remove First"); makeButton(this, p2, reml, "Remove Last"); makeButton(this, p2, getf, "Get First"); makeButton(this, p2, getl, "Get Last"); add(p2); // list iterator buttons Panel p3 = new Panel(); p3.setLayout(new GridLayout(4,1)); makeButton(this, p3, prevB, "Previous"); makeButton(this, p3, nextB, "Next"); makeButton(this, p3, addB, "Add"); makeButton(this, p3, remB, "Remove"); add(p3); } }