import java.awt.*; import java.util.*; import java.net.*; import java.io.*; import java.applet.Applet; public class Users_5 extends Applet { userClient c; public void init() { c = new userClient(); c.show(); } } class userClient extends Frame { Panel main_panel, status_panel, summ_panel; GridBagPanel full_panel; CardLayout cardMgr; Label stat_label; Clock clk_ticker; Hashtable db; List summ_list; int currentItem; userClient() { int REMN = GridBagConstraints.REMAINDER; db = new Hashtable(20); resize(500, 300); setLayout(new BorderLayout()); add("North", main_panel = new Panel()); add("South", status_panel = new Panel()); main_panel.setLayout(cardMgr = new CardLayout()); status_panel.setLayout(new BorderLayout()); main_panel.add("Full", full_panel = new GridBagPanel()); main_panel.add("Summary",summ_panel = new Panel()); status_panel.add("West", stat_label = new Label("Application Started")); status_panel.add("East", clk_ticker = new Clock()); // WGT WIDTH full_panel.add_textfield("Name", 1, REMN); full_panel.add_textfield("Title", 1, REMN); full_panel.add_textfield("Email", 1, REMN); full_panel.add_textfield("Company", 1, REMN); full_panel.add_textfield("Dept", 1, 2); full_panel.add_textfield("MailStop",1, REMN); full_panel.add_textfield("City", 1, 4); full_panel.add_textfield("State", 1, 1); full_panel.add_textfield("Zip", 1, REMN); summ_panel.setLayout(new BorderLayout()); summ_list = new List(10, false); summ_panel.add("Center", summ_list); userMenu menu = new userMenu(this); setMenuBar(menu); setTitle("My first client"); } void Connect() { } void Exit() { } void Edit() { TextField text; printStatus("Editing record"); Enumeration elems = full_panel.fieldlist.elements(); while (elems.hasMoreElements()) { text = (TextField) elems.nextElement(); text.setEditable(true); } } void Add() { TextField text; String name; int a; boolean found_match; printStatus("Saving changes"); UserRecord rec = new UserRecord(full_panel.fieldlist); text = (TextField) full_panel.fieldlist.get("Name"); name = (String) text.getText(); db.put(name, rec); Enumeration elems = full_panel.fieldlist.elements(); while (elems.hasMoreElements()) { text = (TextField) elems.nextElement(); text.setEditable(false); } for (a = 0, found_match = false; a < summ_list.countItems(); a++) { String item = summ_list.getItem(a); if (item.equals(name)) { found_match = true; break; } } if (found_match == false) summ_list.addItem(name); currentItem = a; summ_list.select(currentItem); } void Delete() { String name = summ_list.getSelectedItem(); if (name == null) return; summ_list.delItem(currentItem); db.remove(name); if (currentItem > summ_list.countItems()) { currentItem--; summ_list.select(currentItem); } name = summ_list.getItem(currentItem); UserRecord newrec = (UserRecord) db.get(name); full_panel.display_data(newrec); printStatus("Deleted"); } void Full() { String name = (String) summ_list.getItem(currentItem); UserRecord rec = (UserRecord) db.get(name); full_panel.display_data(rec); cardMgr.show(main_panel, "Full"); } void Summary() { cardMgr.show(main_panel, "Summary"); } void printStatus(String str) { stat_label.setText(str); } public boolean handleEvent(Event evt) { if (evt.id == Event.ACTION_EVENT) action(evt, evt.target); else if (evt.id == Event.LIST_SELECT) { Integer Int = (Integer) evt.arg; currentItem = Int.intValue(); } return false; } public boolean action(Event evt, Object target) { String item = evt.arg.toString(); if (item.equals("Connect")) Connect(); else if (item.equals("Exit")) Exit(); else if (item.equals("Edit")) Edit(); else if (item.equals("Add")) Add(); else if (item.equals("Delete")) Delete(); else if (item.equals("Full")) Full(); else if (item.equals("Summary")) Summary(); else return false; return true; } } class GridBagPanel extends Panel { GridBagLayout gridbag; GridBagConstraints c; Hashtable fieldlist; GridBagPanel() { gridbag = new GridBagLayout(); c = new GridBagConstraints(); c.fill = GridBagConstraints.BOTH; fieldlist = new Hashtable(10); setLayout(gridbag); } void add_textfield(String text, int weight, int width) { c.weightx = 0; c.weighty = 0; c.gridwidth = 1; c.gridheight= 1; Label label = new Label(text); gridbag.setConstraints(label, c); add(label); c.weightx = weight; c.weighty = 0; c.gridwidth = width; c.gridheight= 1; TextField tfield = new TextField(); tfield.setEditable(false); gridbag.setConstraints(tfield, c); add(tfield); fieldlist.put(text, tfield); } void display_data(UserRecord rec) { String rec_key, rec_elem; TextField disp_elem; Enumeration rec_step; rec_step = rec.hash.keys(); while (rec_step.hasMoreElements()) { rec_key = (String) rec_step.nextElement(); rec_elem = (String) rec.hash.get(rec_key); disp_elem = (TextField) fieldlist.get(rec_key); if (disp_elem != null) disp_elem.setText(rec_elem); } } } class userMenu extends MenuBar { userClient u; userMenu(userClient u) { this.u = u; Menu file = new Menu("File"); Menu edit = new Menu("Edit"); Menu view = new Menu("View", true); Menu casc = new Menu("Cascade"); file.add(new MenuItem("Connect")); file.add(new MenuItem("Exit")); edit.add(new MenuItem("Edit")); edit.add(new MenuItem("Add")); edit.add(new MenuItem("Delete")); view.add(new MenuItem("Full")); view.add(new MenuItem("Summary")); view.add(casc); casc.add(new MenuItem("Cascade-1")); casc.add(new MenuItem("Cascade-2")); casc.add(new MenuItem("Cascade-3")); add(file); add(edit); add(view); } } class Clock extends Label implements Runnable { Thread tick; Clock() { super(new Date().toString(), Label.RIGHT); tick = new Thread(this); tick.start(); } public void run() { while (true) { try { Thread.sleep(1000); setText(new Date().toString()); } catch (InterruptedException e) { tick.destroy(); return; } } } } /**/ class UserRecord { Hashtable hash = new Hashtable(10); UserRecord() { } UserRecord(Hashtable src) { Enumeration elem, key; String fieldLabel, fieldValue; TextField fieldTextF; elem = src.elements(); key = src.keys(); while (key.hasMoreElements()) { fieldLabel = (String) key.nextElement(); fieldTextF = (TextField) elem.nextElement(); fieldValue = fieldTextF.getText(); hash.put(fieldLabel, fieldValue); } } } /**/