import java.awt.event.*;
import java.awt.event.ActionListener;
import java.util.*;
import javax.swing.*;

public class SortedListModel extends AbstractListModel {
  
  public SortedListModel(Object[] args) {
    this.args=args;
  }
  
  public int getSize() {
    return args.length;
  }

  public Object getElementAt(int index) {
    return args[index];
  }
 
  public void sort(boolean ascending) {
    if (ascending)
      Arrays.sort(args);
    else
      Arrays.sort(args,Collections.reverseOrder());
      
    fireContentsChanged(this, 0, getSize()-1);
  }
 
  private final Object[] args;
  
  public static void main(String[] args) {
    final SortedListModel model=new SortedListModel(args);
    
    final JCheckBox sorted=new JCheckBox("sort");
    sorted.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        model.sort(sorted.isSelected());
      }
    });
    
    JPanel panel=new JPanel();
    panel.add(new JList(model));
    panel.add(sorted);
    panel.add(new JList(new ReducedListAdapter(model,3)));
    
    JFrame frame=new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setContentPane(panel);
    frame.setSize(400,300);
    frame.show();
  }
}