import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;

        // Display a JList and allow additions through a JTextField.
        // Monitor additions to the list.
class SwingListFrame2 extends JFrame {
    public SwingListFrame2(){
        final int width = 300, height = 200;
        setSize(width,height);
        Container contents = getContentPane();

        // Display a title.
        contents.add(new JLabel("Add Items to the List",JLabel.CENTER),
                     "North");

        // Use a DefaultListModel object to manage the list.
        final JList list = new JList(new DefaultListModel());
        // Detect when items are selected.
        list.getModel().addListDataListener(new ListDataMonitor());

        // Provide a text field. Text entered here is added to the list
        // as a new item.
        final JTextField inputLine = new JTextField("");
        // Pressing Enter causes the text to be added to the list.
        inputLine.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e){
                // Add the text as a new item in the list.
                final JTextField line = (JTextField) e.getSource();
                final DefaultListModel model =
                                (DefaultListModel) list.getModel();
                model.addElement(line.getText());
                line.setText("");
            }
        });

        // Place the list and input line in a panel.
        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());
        panel.add(new JScrollPane(list));
        panel.add(inputLine,"South");

        contents.add(panel,"Center");
        contents.add(new QuitJPanel(),"South");
    }

        // A ListDataListener that reports changes in the
        // contents of a list's data model.
    protected class ListDataMonitor implements ListDataListener {
        public void intervalAdded(ListDataEvent e){
            final ListModel model = (ListModel) e.getSource();
            final int first = e.getIndex0(), last = e.getIndex1();

            if(first == last){
                Object item = model.getElementAt(first);
                System.out.println("Added: "+item.toString());
            }
            else{
                System.out.println("Interval added: "+first+" to "+last);
            }
        }

        public void intervalRemoved(ListDataEvent e){
            System.out.println("Interval removed.");
        }

        public void contentsChanged(ListDataEvent e){
            System.out.println("Contents changed.");
        }
    }
}
