/*
Chapter 9:
The UserTracking Class
Programmer:
Brad Shedd
Date:
April 28, 2004
Filename:
UserTracking.java
Purpose: To
provide a reusable UserTracking class
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public
class
UserTrackingDemo
extends JFrame
implements
ActionListener
{
private
JTextField jtfUser, jtfNumUsers;
private
JButton jbtLogon, jbtLogoff;
private
ArrayList userList;
private
int numUsers = 0;
public
static
void
main(String[] args)
{
int
width = 200;
int
height = 130;
UserTrackingDemo frame =
new
UserTrackingDemo();
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(width, height);
frame.centerOnScreen(width, height);
frame.setVisible(true);
}
public
UserTrackingDemo()
{
userList =
new
ArrayList(20);
//sets up for 20 entries
setTitle("User
Tracking");
JPanel p =
new
JPanel();
p.setLayout(new
FlowLayout());
p.add(new
JLabel("User: "));
p.add(jtfUser =
new
JTextField(10));
p.add(jbtLogon =
new
JButton("Log On"));
p.add(jbtLogoff =
new
JButton("Log Off"));
p.add(new
JLabel("Number Of User: "));
p.add(jtfNumUsers =
new
JTextField(5));
jtfNumUsers.setEditable(false);
jbtLogon.addActionListener(this);
jbtLogoff.addActionListener(this);
getContentPane().setLayout(new
BorderLayout());
getContentPane().add(p,BorderLayout.CENTER);
}
public
void centerOnScreen(int
width,
int height)
{
int
top, left, x, y;
// Get the
screen dimension
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
// Determine
the location for the top left corner of the frame
x =
(screenSize.width - width)/2;
y =
(screenSize.height - height)/2;
top = (x < 0) ? 0
: x;
left = (y < 0) ?
0 : y;
// Set the
frame to the specified location
this.setLocation(top,
left);
}
public
void actionPerformed(ActionEvent e)
{
String
userEntered = jtfUser.getText();
if(userEntered.length()
> 0)
{
if(e.getSource()
== jbtLogon)
// user clicked Use user
{
try
{
logonUser(userEntered);
jtfNumUsers.setText(String.valueOf(numUsers));
jtfUser.setText("");
jtfUser.requestFocus();
}
catch
(Exception ex)
{
JOptionPane.showMessageDialog(this,
ex.getMessage(),
"Logon failed.",
JOptionPane.ERROR_MESSAGE);
}
}
else
if
(e.getSource() == jbtLogoff)
// user clicked Change User
{
try
{
logoffUser(userEntered);
jtfNumUsers.setText(String.valueOf(numUsers));
jtfUser.setText("");
jtfUser.requestFocus();
}
catch
(Exception ex)
{
JOptionPane.showMessageDialog(this,
ex.getMessage(),
"Logoff failed.",
JOptionPane.ERROR_MESSAGE);
}
}
}
else
// can never
happen
{
JOptionPane.showMessageDialog(this,
"Please enter a valid user name.",
"Invalid entry.Try again.",
JOptionPane.ERROR_MESSAGE);
jtfUser.requestFocus();
}
}//
end of try
private
void logonUser(String user)
throws
Exception
{
if(!userList.contains(user))
{
user.trim();
userList.add(user);
++numUsers;
}
else
throw
new Exception("User
already logged on.");
}
private
void logoffUser(String user)throws
Exception
{
int
index = 0;
index = userList.indexOf(user.trim());
if(index
< 0)
throw
new Exception("User
not logged on.");
else
{
userList.remove(index);
--numUsers;
}
}
}