Just as we have transformed our source list to be sorted, we will transform the
      sorted list to be filtered. The JTable will display the 
      filtered list which is already sorted. We will also add the filter editing 
      JTextField to our panel.
  /**
   * Display a frame for browsing issues.
   */
  public void display() {
    SortedList sortedIssues = new SortedList(issuesEventList, new IssueComparator());
    TextFilterList textFilteredIssues = new TextFilterList(sortedIssues, new IssueTextFilterator());
    
    // create a panel with a table
    JPanel panel = new JPanel();
    panel.setLayout(new GridBagLayout());
    EventTableModel issuesTableModel = new EventTableModel(textFilteredIssues, new IssueTableFormat());
    JTable issuesJTable = new JTable(issuesTableModel);
    TableComparatorChooser tableSorter = new TableComparatorChooser(issuesJTable, sortedIssues, true);
    JScrollPane issuesTableScrollPane = new JScrollPane(issuesJTable);
    panel.add(new JLabel("Filter: "), new GridBagConstraints(...));
    panel.add(textFilteredIssues.getFilterEdit(), new GridBagConstraints(...));
    panel.add(issuesTableScrollPane, new GridBagConstraints(...));
    
    // create a frame with that panel
    JFrame frame = new JFrame("Issues");
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.setSize(540, 380);
    frame.getContentPane().add(panel);
    frame.show();
  }