With your columns prepared, replace the
      JList with a JTable. This
      means exchanging the EventListModel with an
      EventTableModel, which requires your
      IssueTableFormat for its constructor. The
      SortedList is the data source for the
      EventTableModel.
Although it's initially sorted by priority, your users will want
      to reorder the table by clicking on the column headers. For example,
      clicking on the "Type" header shall sort the issues by type. For this,
      Glazed Lists provides TableComparatorChooser,
      which adds sorting to a JTable using your
      SortedList.
  /**
   * Display a frame for browsing issues.
   */
  public void display() {
    SortedList sortedIssues = new SortedList(issuesEventList, new IssueComparator());
    
    // create a panel with a table
    JPanel panel = new JPanel();
    panel.setLayout(new GridBagLayout());
    EventTableModel issuesTableModel = new EventTableModel(sortedIssues, new IssueTableFormat());
    JTable issuesJTable = new JTable(issuesTableModel);
    TableComparatorChooser tableSorter = new TableComparatorChooser(issuesJTable, sortedIssues, true);
    JScrollPane issuesTableScrollPane = new JScrollPane(issuesJTable);
    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();
  }TableComparatorChooser supports both
        single column sorting (simpler) and multiple column sorting (more
        powerful). This is configured by the third argument in the
        constructor.
By default, TableComparatorChooser sorts
        by casting column values to Comparable. If your
        column's values are not Comparable, you'll have
        to manually remove the default Comparator using
        TableComparatorChooser.getComparatorsForColumn(column).clear().