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