1
package org.jboss.remoting.samples.chat.client;
5
import java.awt.GridBagConstraints;
6
import java.awt.GridBagLayout;
7
import java.awt.Insets;
8
import java.awt.SystemColor;
9
import java.awt.event.ActionEvent;
10
import java.util.ArrayList;
11
import java.util.Iterator;
13
import javax.swing.JButton;
14
import javax.swing.JLabel;
15
import javax.swing.JScrollPane;
16
import javax.swing.JTextArea;
17
import javax.swing.JTextField;
19
import org.jboss.remoting.samples.chat.exceptions.TalkConnectionException;
23
* <p>Description: </p>
24
* <p>Copyright: Copyright (c) 2003</p>
26
* @author not attributable
30
interface TalkConnectionStrategy
32
void send(ChatMessage message) throws TalkConnectionException;
33
void leave() throws TalkConnectionException;
37
public class TalkFrame extends CloseableFrame {
38
JScrollPane jScrollPane1 = new JScrollPane();
39
JButton closeButton = new JButton();
40
JButton exitButton = new JButton();
41
JTextArea backChatTextArea = new JTextArea();
42
JTextField newMessage = new JTextField();
43
JLabel talkLabel = new JLabel();
44
GridBagLayout gridBagLayout1 = new GridBagLayout();
46
private String description;
47
private String nickname;
48
private String[] backChat;
49
private TalkConnectionStrategy tcs;
50
private Font plainFont;
51
private Font boldFont;
52
private String chatKey;
54
private static ArrayList talkWindows = new ArrayList();
56
public final boolean NEW_CHAT = true;
57
public final boolean OLD_CHAT = false;
59
public TalkFrame(String description, String nickname, Closeable parent)
62
this.description = description;
63
this.nickname = nickname;
72
plainFont = new Font("SanSerif", Font.PLAIN, 12);
73
boldFont = new Font("SanSerif", Font.BOLD, 12);
75
talkWindows.add(this);
78
private void jbInit() throws Exception {
79
this.getContentPane().setLayout(gridBagLayout1);
80
closeButton.setFont(new java.awt.Font("SansSerif", 1, 12));
81
closeButton.setText("Close");
82
closeButton.addActionListener(new TalkFrame_closeButton_actionAdapter(this));
83
exitButton.setFont(new java.awt.Font("SansSerif", 1, 12));
84
exitButton.setText("Exit");
85
exitButton.addActionListener(new TalkFrame_exitButton_actionAdapter(this));
86
backChatTextArea.setFont(new java.awt.Font("Monospaced", 0, 13));
87
backChatTextArea.setDisabledTextColor(Color.white);
88
backChatTextArea.setEditable(false);
89
backChatTextArea.setText("");
90
newMessage.setText("");
91
newMessage.addActionListener(new TalkFrame_newMessage_actionAdapter(this));
92
newMessage.requestFocus();
93
talkLabel.setFont(new java.awt.Font("SansSerif", 1, 12));
94
talkLabel.setText("Talk:");
95
jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
96
jScrollPane1.getViewport().setBackground(Color.white);
97
jScrollPane1.setAutoscrolls(true);
98
this.getContentPane().setBackground(SystemColor.control);
99
this.getContentPane().add(closeButton, new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0
100
,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(28, 204, 21, 0), 6, 0));
101
this.getContentPane().add(exitButton, new GridBagConstraints(2, 2, 1, 1, 0.0, 0.0
102
,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(28, 17, 21, 280), 18, 0));
103
this.getContentPane().add(jScrollPane1, new GridBagConstraints(1, 0, 2, 1, 1.0, 1.0
104
,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(10, 8, 0, 33), 602, 264));
105
this.getContentPane().add(talkLabel, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0
106
,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(34, 15, 0, 0), 7, -1));
107
this.getContentPane().add(newMessage, new GridBagConstraints(1, 1, 2, 1, 1.0, 0.0
108
,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(25, 10, 0, 33), 602, 6));
109
jScrollPane1.getViewport().add(backChatTextArea, null);
111
setTitle(description);
117
public void registerStrategy(TalkConnectionStrategy tcs)
123
public void registerChatKey(String chatKey)
125
System.out.println("TalkFrame: registering chat key: " + chatKey);
126
this.chatKey = chatKey;
130
public void appendMessage(ChatMessage chatMessage)
132
String message = chatMessage.get_message();
133
int mark = message.indexOf(':');
134
int boundedMark = java.lang.Math.max(0, mark); // if ':' is missing, mark == -1
135
boundedMark = java.lang.Math.min(8, boundedMark); // restrict names to 8 characters
136
String name = message.substring(0, boundedMark) + ":" + " ".substring(0, 8 - boundedMark);
137
String content = message.substring(mark + 1) + "\n";
138
backChatTextArea.append(name + content);
140
// backChatTextArea.append(message);
142
// System.out.println("****appendMessage: scrollbar position: " + jScrollPane1.getViewport().getViewPosition());
143
int value = jScrollPane1.getVerticalScrollBar().getModel().getMaximum()
144
- jScrollPane1.getVerticalScrollBar().getModel().getExtent();
145
value = (int) Math.round(.9 * value);
146
// System.out.println("****appendMessage: setting scrollbar value to " + value);
147
jScrollPane1.getVerticalScrollBar().getModel().setValue(value);
152
public void appendMessages(ArrayList messages) {
153
for (int i = 0; i < messages.size(); i++) {
154
appendMessage((ChatMessage) messages.get(i));
159
public static void main(String[] args)
161
String[] backChat = {
162
"roger: take this", "mike: take that"};
164
TalkFrame talkFrame = new TalkFrame(
175
throw new Error("TalkFrame '" + description + "' close(): no TalkStrategy registered");
180
catch (TalkConnectionException rce) {
181
System.out.println("TalkFrame: unable to close");
185
System.out.println("member '" + nickname + "' is leaving chat room '" + description + "'");
186
talkWindows.remove(this);
190
void closeButton_actionPerformed(ActionEvent e)
195
public static void exit()
197
Iterator it = new ArrayList(talkWindows).iterator(); // close() modifies talkWindows
200
((TalkFrame)it.next()).close();
205
void exitButton_actionPerformed(ActionEvent e)
210
void newMessage_actionPerformed(ActionEvent e)
213
throw new Error("TalkFrame exit button: no TalkStrategy registered");
216
tcs.send(new ChatMessage(chatKey, nickname + ": " + newMessage.getText()));
218
catch (TalkConnectionException rce) {
219
System.out.println("TalkFrame: unable to send new chat line");
222
newMessage.setText("");
229
class TalkFrame_closeButton_actionAdapter implements java.awt.event.ActionListener {
232
TalkFrame_closeButton_actionAdapter(TalkFrame adaptee) {
233
this.adaptee = adaptee;
235
public void actionPerformed(ActionEvent e) {
236
adaptee.closeButton_actionPerformed(e);
240
class TalkFrame_exitButton_actionAdapter implements java.awt.event.ActionListener {
243
TalkFrame_exitButton_actionAdapter(TalkFrame adaptee) {
244
this.adaptee = adaptee;
246
public void actionPerformed(ActionEvent e) {
247
adaptee.exitButton_actionPerformed(e);
251
class TalkFrame_newMessage_actionAdapter implements java.awt.event.ActionListener {
254
TalkFrame_newMessage_actionAdapter(TalkFrame adaptee) {
255
this.adaptee = adaptee;
257
public void actionPerformed(ActionEvent e) {
258
adaptee.newMessage_actionPerformed(e);
262
class DummyTalkConnectionStrategy implements TalkConnectionStrategy
264
public DummyTalkConnectionStrategy() throws TalkConnectionException
266
System.out.println("DummyTalkConnectionStrategy()");
269
public void getBackChat(TalkFrame talkFrame) throws TalkConnectionException
271
System.out.println("DummyTalkConnectionStrategy.getBackChat()");
274
public void send(ChatMessage message)
276
System.out.println("DummyTalkConnectionStrategy.send()");
279
public void leave() throws TalkConnectionException
281
System.out.println("DummyTalkConnectionStrategy.leave()");