import java.awt.event.*;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.event.ListSelectionListener;

/**
 * @author Remi Forax
 *
 */
public class TwoListExample {

  private static JButton createMoveButton(String text,final JList from,final JList to) {
    final JButton button=new JButton(text);
    button.setEnabled(false);
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        int index=from.getSelectedIndex();
        if (index==-1)
          throw new AssertionError("button must not be selected");
        
        Object value=from.getSelectedValue();
        
        DefaultListModel fromModel=(DefaultListModel)from.getModel();
        fromModel.remove(index);
        
        DefaultListModel toModel=(DefaultListModel)to.getModel();
        toModel.addElement(value);
      }
    });
    
    from.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
      public void valueChanged(ListSelectionEvent e) {
        button.setEnabled((from.getSelectedIndex()!=-1));
      }
    });
    
    return button;
  }
  
  private static JList createList() {
    DefaultListModel listModel=new DefaultListModel();
    JList list=new JList(listModel);
    list.setPrototypeCellValue("AAAAAAAAAA");
    list.setVisibleRowCount(8);
    list.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    return list;
  }

  public static void main(String[] args) {
    JList list1=createList();
    DefaultListModel listModel=(DefaultListModel)list1.getModel(); 
    for(int i=0;i<args.length;i++)
        listModel.addElement(args[i]);
    
    JList list2=createList();
      
    JButton button1=createMoveButton(">>",list1, list2);
    JButton button2=createMoveButton("<<",list2, list1);
    
    Box box=new Box(BoxLayout.Y_AXIS);
    box.add(button1);
    box.add(button2);
    
    JPanel panel=new JPanel(null);
    panel.setLayout(new BoxLayout(panel,BoxLayout.X_AXIS));
    panel.add(new JScrollPane(list1));
    panel.add(box);
    panel.add(new JScrollPane(list2));
    
    JFrame frame=new JFrame("TwoListExample");
    frame.setContentPane(panel);
    frame.pack();
    frame.show();
  }
}
