summaryrefslogtreecommitdiff
path: root/src/tesseract/chatbox/Chatbox.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/tesseract/chatbox/Chatbox.java')
-rw-r--r--src/tesseract/chatbox/Chatbox.java153
1 files changed, 125 insertions, 28 deletions
diff --git a/src/tesseract/chatbox/Chatbox.java b/src/tesseract/chatbox/Chatbox.java
index 7fa9fd6..50e2b95 100644
--- a/src/tesseract/chatbox/Chatbox.java
+++ b/src/tesseract/chatbox/Chatbox.java
@@ -1,6 +1,7 @@
package tesseract.chatbox;
import java.awt.BorderLayout;
+import java.awt.FlowLayout;
import java.awt.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -18,64 +19,133 @@ import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
+import common.Peer;
+import common.PeerMessage;
+
+/**
+ * Chat box.
+ * @author Phillip Cardon
+ * @version 0.1 untested
+ */
public class Chatbox extends JFrame implements Observer {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Panel for construction.
+ */
private final JPanel textPanel;
+
+ /**
+ * Scroller for text area.
+ */
private final JScrollPane scroller;
- private final JTextArea textArea;
+
+ /**
+ * Text area for chat.
+ */
+ private final JTextArea chatRoomDisplay;
+
+ /**
+ * Submit button for message.
+ */
private final JButton submitButton;
+
+ /**
+ * Text field to send chat messages.
+ */
private final JTextField chatField;
+
+ /**
+ * my Peer name.
+ */
private String myName;
+
+ /**
+ * String to send to peers.
+ */
private String toSend;
+
+ /**
+ * All chats sent/received.
+ */
private StringBuilder chats;
- public Chatbox() {
+ /**
+ * Peer object.
+ */
+ private Peer myPeer;
+
+ /**
+ * Constructor.
+ * @param thePeer object.
+ */
+ public Chatbox(final Peer thePeer) {
+ myPeer = thePeer;
textPanel = new JPanel(new BorderLayout());
- textArea = new JTextArea(10, 80);
- textArea.setEditable(false);
- scroller = new JScrollPane(textArea);
+ chatRoomDisplay = new JTextArea(10, 80);
+ chatRoomDisplay.setEditable(false);
+ scroller = new JScrollPane(chatRoomDisplay);
submitButton = new JButton("Submit");
- chatField = new JTextField();
+ chatField = new JTextField(70);
this.setName("Chat");
chats = new StringBuilder();
buildFrame();
attachListeners();
+ myName = "OFFLINE";
+ this.setName("Chatbox");
}
+ /**
+ * Attaches Listeners to button and text field.
+ */
private void attachListeners() {
submitButton.addActionListener(new ActionListener() {
@Override
- public void actionPerformed(ActionEvent arg0) {
+ public void actionPerformed(final ActionEvent arg0) {
//TODO: SEND MESSAGE IN chatField.
if (arg0.getSource().equals(submitButton)) {
toSend = chatField.getText();
chatField.setText("");
- // PeerMessage message = new PeerMessage(Message, null, toSend);
- // Send(message);
+ chats.append("\n");
+ chats.append(myName + ": " + toSend);
+ chatRoomDisplay.setText(chats.toString());
+ chatField.setText("");
+ myPeer.sendExtraToAllPeers(toSend);
}
}
});
-
-
- //chatField.addKeyListener()
-
+ chatField.addKeyListener(new ChatFieldListener());
}
-
- public boolean setMyName(final String theName) {
- myName = theName;
- return myName.equals(theName);
+
+ /**
+ * Sets name of this client (local use only).
+ * @param theName of this client
+ * @return name set.
+ */
+ public void setMyName() {
+ myName = myPeer.getMyName();
}
+ /**
+ * Builds Chat frame.
+ */
private void buildFrame() {
textPanel.add(scroller, BorderLayout.CENTER);
- JPanel southPanel = new JPanel();
- GroupLayout layout = new GroupLayout(southPanel);
- layout.setHorizontalGroup(
+ JPanel southPanel = new JPanel(new FlowLayout());
+ //FlowLayout layout =
+
+ /*layout.setHorizontalGroup(
layout.createSequentialGroup()
.addComponent(chatField)
.addComponent(submitButton)
- );
+ );*/
+ southPanel.add(chatField);
+ southPanel.add(submitButton);
textPanel.add(southPanel, BorderLayout.SOUTH);
this.add(textPanel);
this.pack();
@@ -83,13 +153,27 @@ public class Chatbox extends JFrame implements Observer {
}
@Override
- public void update(Observable arg0, Object arg1) {
- String inc = " ";
- String source = " ";
+ public void update(final Observable arg0, final Object arg1) {
+ if (arg1.getClass().equals(PeerMessage.class)) {
+ PeerMessage msg = (PeerMessage) arg1;
+ if (msg.extra.getClass().equals(String.class)) {
+ String incMsg = (String) msg.extra;
+ String source = msg.sender.toString();
+ chats.append("\n");
+ chats.append(source + ": " + incMsg);
+ chatRoomDisplay.setText(chats.toString());
+ } else {
+ System.err.println("Message Extra Field is"
+ + " of unsupported type.");
+ }
+ }
+ //Object extra =
+ //String inc = " ";
+ //String source = " ";
// TODO Listen for PeerMessage with string in it.
/*
- if (((PeerMessage) arg0).getExtra().getClass == inc.getClass()) {
- inc = (PeerMessage) arg0).getExtra();
+ if (arg1.getClass() == inc.getClass()) {
+ inc = arg1;
source = ((PeerMessage) arg0).getPeer.getName();
chats.append("\n");
chats.append(source + ": " + inc);
@@ -99,12 +183,25 @@ public class Chatbox extends JFrame implements Observer {
}
+ /**
+ * KeyAdapter inner class for textfield.
+ * @author Phillip Cardon
+ * @verson 1.0
+ */
private class ChatFieldListener extends KeyAdapter {
-
- public void keyReleased(KeyEvent e) {
+
+ /**
+ * keyReleased, activates on enter key released.
+ * @param e key event.
+ */
+ public void keyReleased(final KeyEvent e) {
if (e.getKeyCode() == 10) {
toSend = chatField.getText();
+ chats.append("\n");
+ chats.append(myName + ": " + toSend);
+ chatRoomDisplay.setText(chats.toString());
chatField.setText("");
+ myPeer.sendExtraToAllPeers(toSend);
}
}
}