import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; /* Demo modified from Walrath and Campione's ListDemo.java in The JFC Swing Tutorial: Java 2 Platform, Addison Wesley 1999 that has an initially empty list. mike barnes */ public class ListDemo extends JFrame implements ListSelectionListener { private JList list; private DefaultListModel listModel; private JPanel panel; private JButton one, two, three, four; private static final String todoString = "To do "; private static final String doneString = "Done"; private static final String editString = "Edit"; private JButton todoButton, doneButton, editButton; private JTextField textValue; public ListDemo() { super("To Do Demo"); listModel = new DefaultListModel(); //Create the list and put it in a scroll pane list = new JList(listModel); list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); list.addListSelectionListener(this); JScrollPane listScrollPane = new JScrollPane(list); todoButton = new JButton(todoString); todoButton.setActionCommand(todoString); todoButton.addActionListener(new ToDoListener()); doneButton = new JButton("Done"); doneButton.setActionCommand(doneString); doneButton.setEnabled(false); doneButton.addActionListener(new DoneListener()); editButton = new JButton("Edit"); editButton.setActionCommand(editString); editButton.setEnabled(false); editButton.addActionListener(new EditListener()); textValue = new JTextField(10); textValue.addActionListener(new ToDoListener()); // String name = listModel.getElementAt( // list.getSelectedIndex()).toString(); textValue.setText(""); //Create a panel that uses FlowLayout (the default). JPanel buttonPane = new JPanel(); buttonPane.add(textValue); buttonPane.add(todoButton); buttonPane.add(doneButton); buttonPane.add(editButton); Container contentPane = getContentPane(); contentPane.setLayout(new BorderLayout()); listScrollPane.setPreferredSize(new Dimension(300, 200)); contentPane.add(listScrollPane, BorderLayout.CENTER); contentPane.add(buttonPane, BorderLayout.SOUTH); System.out.println("selected position is" + Integer.toString(list.getSelectedIndex())); } class EditListener implements ActionListener { public void actionPerformed(ActionEvent e) { int index = list.getSelectedIndex(); listModel.insertElementAt(textValue.getText(), index); listModel.remove(index +1); list.setSelectedIndex(index); } } class DoneListener implements ActionListener { public void actionPerformed(ActionEvent e) { //This method can be called only if //there's a valid selection //so go ahead and remove whatever's selected. int index = list.getSelectedIndex(); System.out.println("remove position is" + Integer.toString(list.getSelectedIndex())); listModel.remove(index); int size = listModel.getSize(); if (size == 0) { //Nobody's left, disable firing. doneButton.setEnabled(false); editButton.setEnabled(false); } else { //Adjust the selection. if (index == listModel.getSize())//removed item in last position index--; list.setSelectedIndex(index); } //otherwise select same index } } //This listener is shared by the text field and the ToDo button class ToDoListener implements ActionListener { public void actionPerformed(ActionEvent e) { //User didn't type in a name... if (textValue.getText().equals("")) { Toolkit.getDefaultToolkit().beep(); return; } int index = list.getSelectedIndex(); int size = listModel.getSize(); //If no selection or if item in last position is selected, //add the new hire to end of list, and select new hire. if (index == -1 || (index+1 == size)) { listModel.addElement(textValue.getText()); list.setSelectedIndex(size); } //Otherwise insert the new hire after the current selection, //and select new hire. else { listModel.insertElementAt(textValue.getText(), index+1); list.setSelectedIndex(index+1); } System.out.println("added position is" + Integer.toString(list.getSelectedIndex())); } } public void valueChanged(ListSelectionEvent e) { if (e.getValueIsAdjusting() == false) { if (list.getSelectedIndex() == -1) { //No selection, disable fire button. doneButton.setEnabled(false); editButton.setEnabled(false); textValue.setText(""); } else { //Selection, update text field. editButton.setEnabled(true); doneButton.setEnabled(true); String name = list.getSelectedValue().toString(); textValue.setText(name); } } } public static void main(String s[]) { JFrame frame = new ListDemo(); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.pack(); frame.setVisible(true); } }