import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.rmi.RemoteException;
import javax.swing.*;
import java.awt.Dimension;
/**
* Java Chat - A simple chatroom application - OptionsFrame Class.
*
* This is the OptionsFrame class. It provides a user with additional
* options, such as changing their username.
*
* @author Sean Handley
* @version November, 2006
*/
public class OptionsFrame extends JFrame implements ActionListener {
private static final long serialVersionUID = -2120820012411543758L;
private ChatClient cc;
private final String windowTitle = "Chat Options";
private JLabel lblUsername;
private JTextField txtUsername;
private JButton btnOk;
/**
* Constructor for the options frame. Takes a chat client
* reference and adds it to a local variable to allow methods
* to be called by GUI events.
*
* @param cc
*/
public OptionsFrame(ChatClient cc)
{
super();
//add listener to call exit procedure on close
addWindowListener(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
exitProcedure();
}
}
);
this.cc = cc;
}
/**
* Build the GUI using Swing components.
*/
public void buildGUI()
{
//Start building the GUI
Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout());
lblUsername = new JLabel("Username:");
txtUsername = new JTextField(cc.getUserName());
txtUsername.setPreferredSize(new Dimension(200,20));
btnOk = new JButton("Ok");
btnOk.addActionListener(this);
contentPane.add(lblUsername);
contentPane.add(txtUsername);
contentPane.add(btnOk);
getRootPane().setDefaultButton(btnOk);
pack();
setLocationRelativeTo(null);
setTitle(windowTitle);
setResizable(false);
setVisible(true);
txtUsername.requestFocus();
}
/*
* Disposes the window.
*/
private void exitProcedure()
{
dispose();
}
/**
* Respond to component events. Implements the ActionListener
* interface.
*
* @param event
*/
public void actionPerformed(ActionEvent event) {
if (event.getSource() == btnOk)
{
if(txtUsername.getText().length() > 0) //make sure the name is not null
{
//if the username hasn't changed...
if(cc.getUserName().equalsIgnoreCase(txtUsername.getText()))
{
exitProcedure();
}
else
{
if(cc.isLoggedIn())
{
try
{
if(!cc.checkUser(txtUsername.getText())) //if the name isn't taken...
{
cc.changeName(txtUsername.getText());
exitProcedure();
}
else
{
JOptionPane.showMessageDialog(this,"Username is in use. Please select another.");
}
}
catch(RemoteException e)
{
System.err.println(e.toString());
}
}
else
{
try
{
if(!cc.checkUser(txtUsername.getText()))
{
cc.setUserName(txtUsername.getText());
exitProcedure();
}
else
{
JOptionPane.showMessageDialog(this,"Username is in use. Please select another.");
}
}
catch(RemoteException e)
{
System.err.println(e.toString());
}
}
}
}
else
{
JOptionPane.showMessageDialog(this, "Please enter a username.");
}
}
}
}