From 693cb18e45051b4a3784915000b3297623e82240 Mon Sep 17 00:00:00 2001 From: Phillip Date: Sat, 5 Mar 2011 05:34:51 +0000 Subject: Changes from email: 1: I had to pass Peer to Chatbox as a parameter to allow it to transmit messages (working!) 2: Added Chatbox option in networking menu. 3: Hitting or submit with Chatbox having focus transmits message in the Textfield 4: Made a getter in Peer to get the PeerInformation.toString() --- src/tesseract/TesseractUI.java | 27 ++++++- src/tesseract/chatbox/Chatbox.java | 153 ++++++++++++++++++++++++++++++------- 2 files changed, 150 insertions(+), 30 deletions(-) (limited to 'src/tesseract') diff --git a/src/tesseract/TesseractUI.java b/src/tesseract/TesseractUI.java index 113b32a..5060e08 100644 --- a/src/tesseract/TesseractUI.java +++ b/src/tesseract/TesseractUI.java @@ -36,6 +36,7 @@ import javax.vecmath.Point3d; import javax.vecmath.Point3f; import javax.vecmath.Vector3f; +import tesseract.chatbox.Chatbox; import tesseract.forces.AirDrag; import tesseract.forces.CircularXY; import tesseract.forces.CircularXZ; @@ -52,7 +53,6 @@ import tesseract.newmenu.NewPlanarPolygonMenuItem; import tesseract.newmenu.NewSurfBoardMenuItem; import tesseract.newmenu.NewToroidMenuItem; import tesseract.objects.PhysicalObject; -import tesseract.objects.Sphere; import com.sun.j3d.utils.picking.PickCanvas; import com.sun.j3d.utils.picking.PickResult; @@ -96,6 +96,11 @@ public class TesseractUI extends JFrame { */ private Peer myPeer; + /** + * The Chatbox. + */ + private Chatbox myChatbox; + /** * The Canvas. */ @@ -135,7 +140,8 @@ public class TesseractUI extends JFrame { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); myPeer = new Peer(true); - + myChatbox = new Chatbox(myPeer); + myPeer.addObserver(myChatbox); myWorld = new World( new BoundingBox(new Point3d(-UNIT / 2, -UNIT / 2, -UNIT / 2), new Point3d(UNIT / 2, UNIT / 2, UNIT / 2)), @@ -220,6 +226,7 @@ public class TesseractUI extends JFrame { String ip = JOptionPane.showInputDialog("Enter the IP to connect to: "); myPeer.connectToNetwork(ip); } + myChatbox.setMyName(); //sets myName Field of Chatbox to Peer ID. } }); networkMenu.add(join); @@ -363,12 +370,28 @@ public class TesseractUI extends JFrame { exit.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { // TODO: I feel this is the wrong way of exiting... + // TODO: Properly shutdown network connection here! System.exit(0); } }); simulationMenu.add(exit); + //* + //JMenu networkMenu = new JMenu("Communication"); + JMenuItem chat = new JMenuItem("Chat"); + chat.addActionListener(new ActionListener(){ + + @Override + public void actionPerformed(ActionEvent arg0) { + myChatbox.setVisible(true); + } + }); + networkMenu.add(chat); + //menuBar.add(networkMenu);//*/ setJMenuBar(menuBar); + + + } /** 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); } } } -- cgit v1.2.3