001 package users.swing;
002
003 import users.*;
004
005 import javax.swing.*;
006 import java.awt.*;
007 import java.util.*;
008
009 /**
010 * A list box that will display all users managed by a UserManager.
011 *
012 * @see UserManager
013 * @see User
014 *
015 * @author Steffen Zschaler
016 * @version 2.0 05/05/1999
017 * @since v2.0
018 */
019 public class JUserList extends JList {
020
021 /**
022 * Create a new JUserList displaying the set of users managed by the global
023 * UserManager. All Users will be displayed and they will be
024 * sorted by their names.
025 */
026 public JUserList() {
027 this(UserManager.getGlobalUM());
028 }
029
030 /**
031 * Create a new JUserList displaying the set of users managed by a given UserManager. All Users will be
032 * displayed and they will be sorted by their names.
033 *
034 * @param um the UserManager to be displayed.
035 */
036 public JUserList(UserManager um) {
037 this(um, null, null);
038 }
039
040 /**
041 * Create a new JUserList modelling the global UserManager.
042 *
043 * @param uf a filter that defines the set of users to be displayed. If <code>null</code>, no filtering will
044 * occur.
045 * @param cmp a Comparator that defines the order of the users to be displayed. The objects to be compared
046 * by this comparator will be Users. If <code>null</code>, users will be ordered by their names.
047 */
048 public JUserList(UserFilter uf, Comparator cmp) {
049 this(UserManager.getGlobalUM(), uf, cmp);
050 }
051
052 /**
053 * Create a new JUserList modelling a given UserManager.
054 *
055 * @param um the UserManager to be modelled.
056 * @param uf a filter that defines the set of users to be displayed. If <code>null</code>, no filtering will
057 * occur.
058 * @param cmp a Comparator that defines the order of the users to be displayed. The objects to be compared
059 * by this comparator will be Users. If <code>null</code>, users will be ordered by their names.
060 */
061 public JUserList(UserManager um, UserFilter uf, Comparator cmp) {
062 super();
063
064 setModel(new UserListModel(um, uf, cmp));
065
066 setCellRenderer(new UserListCellRenderer());
067 }
068
069 /**
070 * The list cell renderer to render {@link User} objects in list cells.
071 *
072 * <p>This list cell renderer can be used with JComboBoxes as well.</p>
073 *
074 * @author Steffen Zschaler
075 * @version 2.0 05/05/1999
076 * @since v2.0
077 */
078 public static class UserListCellRenderer extends JLabel implements ListCellRenderer {
079
080 /**
081 * Create a new UserListCellRenderer.
082 */
083 public UserListCellRenderer() {
084 setOpaque(true);
085 }
086
087 /**
088 * Configure this list cell renderer to display the given user's data and return
089 * <code>this</code>.
090 *
091 * @param list the list in which to render the User object
092 * @param value assumed to be the User object to be rendered
093 * @param index the position in the list at which to render the User object.
094 * @param isSelected true if the User object is to be rendered in a selected state
095 * @param cellHasFocus true if the cell to be rendered has the input focus.
096 *
097 * @return this list cell renderer configured to render the given User object.
098 *
099 * @override Sometimes
100 */
101 public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
102 boolean cellHasFocus) {
103 if (value != null) {
104 setText(((User)value).getName());
105 } else {
106 setText("");
107 }
108
109 setFont(list.getFont());
110
111 setBackground(isSelected ? list.getSelectionBackground() : Color.white);
112 setForeground(isSelected ? list.getSelectionForeground() : Color.black);
113
114 return this;
115 }
116 }
117
118 /**
119 * Convenience method returning the currently selected user.
120 *
121 * @return the currently selected user.
122 *
123 * @override Never
124 */
125 public User getSelectedUser() {
126 return (User)getSelectedValue();
127 }
128 }