import java.awt.BorderLayout;
import java.awt.Event;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.util.Random;
/**
* simple AWT gui for the chat client
*/
public class Gui extends Frame implements ChatLineListener {
private static final long serialVersionUID = 1L;
protected TextArea outputTextbox;
protected TextField inputField;
protected Client chatClient;
/**
* creates layout
*
* @param title
* title of the window
* @param chatClient
* chatClient that is used for sending and receiving messages
*/
public Gui(String title, Client chatClient) {
super(title);
this.chatClient = chatClient;
init(chatClient);
start();
}
protected void init(Client chatClient) {
// register listener so that we are informed whenever a new chat message
// is received (observer pattern)
outputTextbox = new TextArea();
chatClient.addLineListener(this);
System.out.println("starting gui...");
setLayout(new BorderLayout());
add("North", outputTextbox);
outputTextbox.setEditable(false);
inputField = new TextField();
add("South", inputField);
}
protected void start() {
pack();
setVisible(true);
inputField.requestFocus();
}
/**
* this method gets called every time a new message is received (observer
* pattern)
*/
public void newChatLine(String line) {
outputTextbox.append(line);
}
/**
* handles AWT events (enter in textfield and closing window)
*/
public boolean handleEvent(Event e) {
if ((e.target == inputField) && (e.id == Event.ACTION_EVENT)) {
String text = (String) e.arg;
chatClient.send(new TextMessage(text));
inputField.setText("");
return true;
} else if ((e.target == this) && (e.id == Event.WINDOW_DESTROY)) {
if (chatClient != null)
chatClient.stop();
setVisible(false);
System.exit(0);
return true;
}
return super.handleEvent(e);
}
}