Although our issues list contains over 100 issues, there are only a handful of
users and each user is responsible for multiple issues. This means that our users
list will contain duplicates. This problem is solved quickly and easily by
UniqueList
. Just like SortedList
, the
UniqueList
uses Comparable
elements
or a Comparator
to distinguish between elements.
// derive the users list from the issues list EventList usersNonUnique = new IssueToUserList(issuesEventList); UniqueList usersEventList = new UniqueList(usersNonUnique);
Finally we add a JList
to our user interface to display the
list of users. In the next part of the tutorial, we will get this widget to act as a
custom filter for the issues table.
/** * Display a frame for browsing issues. */ public void display() { SortedList sortedIssues = new SortedList(issuesEventList, new IssueComparator()); TextFilterList textFilteredIssues = new TextFilterList(sortedIssues, new IssueTextFilterator()); // derive the users list from the issues list EventList usersNonUnique = new IssueToUserList(issuesEventList); UniqueList usersEventList = new UniqueList(usersNonUnique); // create the issues table EventTableModel issuesTableModel = new EventTableModel(textFilteredIssues, new IssueTableFormat()); JTable issuesJTable = new JTable(issuesTableModel); TableComparatorChooser tableSorter = new TableComparatorChooser(issuesJTable, sortedIssues, true); JScrollPane issuesTableScrollPane = new JScrollPane(issuesJTable); // create the users list EventListModel usersListModel = new EventListModel(usersEventList); JList usersJList = new JList(usersListModel); JScrollPane usersListScrollPane = new JScrollPane(usersJList); // create the panel JPanel panel = new JPanel(); panel.setLayout(new GridBagLayout()); panel.add(new JLabel("Filter: "), new GridBagConstraints(...)); panel.add(textFilteredIssues.getFilterEdit(), new GridBagConstraints(...)); panel.add(new JLabel("Reported By: "), new GridBagConstraints(...)); panel.add(usersListScrollPane, 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(); }