1
2
3
4
5
6 import java.awt.*;
7 import java.awt.event.*;
8
9 interface Mediator {
10 public abstract void createColleagues();
11 public abstract void colleagueChanged(Colleague colleague);
12 }
13
14 interface Colleague {
15 public abstract void setMediator(Mediator mediator);
16 public abstract void setColleagueEnabled(boolean enabled);
17 }
18
19 class ColleagueButton extends Button implements Colleague {
20 private Mediator mediator;
21 public ColleagueButton(String caption) {
22 super(caption);
23 }
24 public void setMediator(Mediator mediator) {
25 this.mediator = mediator;
26 }
27 public void setColleagueEnabled(boolean enabled) {
28 setEnabled(enabled);
29 }
30 }
31
32 class ColleagueTextField extends TextField implements TextListener, Colleague {
33 private Mediator mediator;
34 public ColleagueTextField(String text, int columns) {
35 super(text, columns);
36 }
37 public void setMediator(Mediator mediator) {
38 this.mediator = mediator;
39 }
40 public void setColleagueEnabled(boolean enabled) {
41 setEnabled(enabled);
42 setBackground(enabled ? Color.white : Color.lightGray);
43 }
44 public void textValueChanged(TextEvent e) {
45 mediator.colleagueChanged(this);
46 }
47 }
48
49 class ColleagueCheckbox extends Checkbox implements ItemListener, Colleague {
50 private Mediator mediator;
51 public ColleagueCheckbox(String caption,
52 CheckboxGroup group, boolean state) {
53 super(caption, group, state);
54 }
55 public void setMediator(Mediator mediator) {
56 this.mediator = mediator;
57 }
58 public void setColleagueEnabled(boolean enabled) {
59 setEnabled(enabled);
60 }
61 public void itemStateChanged(ItemEvent e) {
62 mediator.colleagueChanged(this);
63 }
64 }
65
66 class LoginFrame extends Frame implements ActionListener, Mediator {
67 private ColleagueCheckbox checkGuest;
68 private ColleagueCheckbox checkLogin;
69 private ColleagueTextField textUser;
70 private ColleagueTextField textPass;
71 private ColleagueButton buttonOk;
72 private ColleagueButton buttonCancel;
73
74
75 public LoginFrame(String title) {
76 super(title);
77 setBackground(Color.lightGray);
78 setLayout(new GridLayout(4,2));
79
80
81 createColleagues();
82 add(checkGuest);
83 add(checkLogin);
84 add(new Label("Username:"));
85 add(textUser);
86 add(new Label("Password:"));
87 add(textPass);
88 add(buttonOk);
89 add(buttonCancel);
90
91
92 colleagueChanged(checkGuest);
93 pack();
94 show();
95 }
96
97 public void createColleagues() {
98 CheckboxGroup g = new CheckboxGroup();
99 checkGuest = new ColleagueCheckbox("Guest",g,true);
100 checkLogin = new ColleagueCheckbox("Login",g,false);
101 textUser = new ColleagueTextField("",10);
102 textPass = new ColleagueTextField("",10);
103 textPass.setEchoChar('*');
104 buttonOk = new ColleagueButton("OK");
105 buttonCancel = new ColleagueButton("Cancel");
106
107
108 checkGuest.setMediator(this);
109 checkLogin.setMediator(this);
110 textUser.setMediator(this);
111 textPass.setMediator(this);
112 buttonOk.setMediator(this);
113 buttonCancel.setMediator(this);
114
115
116 checkGuest.addItemListener(checkGuest);
117 checkLogin.addItemListener(checkLogin);
118 textUser.addTextListener(textUser);
119 textPass.addTextListener(textPass);
120 buttonOk.addActionListener(this);
121 buttonCancel.addActionListener(this);
122 }
123
124 public void colleagueChanged(Colleague c) {
125 if(c == checkGuest || c == checkLogin) {
126 if(checkGuest.getState()) {
127 textUser.setColleagueEnabled(false);
128 textPass.setColleagueEnabled(false);
129 buttonOk.setColleagueEnabled(true);
130 } else {
131 textUser.setColleagueEnabled(true);
132 userpassChanged();
133 }
134 } else if(c == textUser || c == textPass) {
135 userpassChanged();
136 } else {
137 System.out.println("colleagueChanged:unknown colleague ="+c);
138 }
139 }
140
141 private void userpassChanged() {
142 if(textUser.getText().length() > 0) {
143 textPass.setColleagueEnabled(true);
144 if(textPass.getText().length() > 0) {
145 buttonOk.setColleagueEnabled(true);
146 } else {
147 buttonOk.setColleagueEnabled(false);
148 }
149 } else {
150 textPass.setColleagueEnabled(false);
151 buttonOk.setColleagueEnabled(false);
152 }
153 }
154 public void actionPerformed(ActionEvent e) {
155 System.out.println(""+e);
156 System.exit(0);
157 }
158 }
159
160 public class MediatorGuiLogin {
161 public static void main(String[] args) {
162 new LoginFrame("Mediator Sample");
163 }
164 }
165
166
167
168
169