package rpicq; import javax.swing.*; import java.awt.*; import javax.swing.border.*; import javax.swing.event.*; import java.awt.event.*; import java.util.*; /** * This class holds the list of users that the local user can talk with. * You should not have to do much with this class that isn't already done in * the skeleton code. * * Use the setUsers(), addUserName(), and removeUserName() methods to control * which users this user can talk to. **/ public class UserListFrame extends JFrame { JList mUserList; Vector mList = new Vector(); String mUserName = "You should really change the user name"; private UIEventListener mUIEventListener; public void setUsers(Vector inVect) { mList = (Vector)inVect.clone(); mUserList.setListData(mList); repaint(); } public void addUserName( String name ) { mList.add(name); mUserList.setListData(mList); repaint(); } public void removeUserName( String name ) { mList.remove(name); mUserList.setListData(mList); repaint(); } public UserListFrame(String inUserName) { super("RPIcq"); mUserName = inUserName; createUI(); } public void setVisible(boolean state) { if (mUIEventListener == null && state == true) { System.err.println("UI WARNING: Showing the UserListFrame without" + " a UIEventListener"); System.err.println(" You should call .setUIEventListener()" + " before .setVisible()" ); } else if (state) { String name = JOptionPane .showInputDialog(this, "Please enter user name", "Login to RPIcq", JOptionPane.QUESTION_MESSAGE); if (name == null || name.equals("")) { JOptionPane .showMessageDialog(this, "You must enter a user name", "Error", JOptionPane.ERROR_MESSAGE); System.exit(0); } else { mUserName = name; mUIEventListener.loginUser( mUserName ); } } super.setVisible(state); } public void setUIEventListener( UIEventListener inl ) { mUIEventListener = inl; } public void removeUIEventListener( UIEventListener inl ) { mUIEventListener = null; } public String getUserName() { return mUserName; } public void setUserName(String inUser) { mUserName = inUser; } private void createUI() { this.getContentPane().setLayout( new GridLayout(1,1) ); mUserList = new JList(); mUserList.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); this.getContentPane().add( new JScrollPane( mUserList) ); mUserList.addMouseListener( new MouseAdapter() { public void mouseClicked(MouseEvent e) { if ((e.getClickCount() == 2) && (!mUserList.isSelectionEmpty())) { MessageSplitFrame messageFrame = new MessageSplitFrame(mUserName, (String)mUserList.getSelectedValue(), mUIEventListener ); mUIEventListener .startConversation(mUserName, (String)mUserList.getSelectedValue(), messageFrame ); } } }); this.pack(); this.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent event) { setVisible(false); mUIEventListener.sessionStop(); } }); } public static void main(String argv[]) { UserListFrame uf = new UserListFrame("Bob"); /* old test code for(int i=0; i<20; i++) uf.addUserName("user " + i ); uf.setUIEventListener( new UIEventAdapter() ); */ uf.setVisible(true); } }