Package ass3.program.ui

Source Code of ass3.program.ui.ChatFrame

package ass3.program.ui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.text.DateFormat;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.border.LineBorder;

import ass3.program.core.MessageEvent;
import ass3.program.core.MessageListener;
import ass3.program.core.message.Message;
import ass3.program.core.message.SendTextRequest;

public class ChatFrame extends JFrame implements MessageListener {

  /**
   *
   */
  private static final long serialVersionUID = -2562478628695724397L;

  String target;

  MainFrame parent;

  JTextArea historyArea;

  JTextArea inputArea;

  public ChatFrame(String target, MainFrame parent) {
    super();
    this.target = target;
    this.parent = parent;
    parent.getChatFrames().put(target, this);

    this.addWindowListener(new WindowAdapter() {
      @Override
      public void windowClosed(WindowEvent e) {
        ChatFrame.this.parent.getChatFrames().remove(
            ChatFrame.this.target);
        ChatFrame.this.parent.getChatter().dropChatter(
            ChatFrame.this.target);
      }
    });

    setTitle(MessageFormat.format("Chat with {0}", target));
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    setSize(400, 600);

    setLayout(new BorderLayout());

    JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT);

    add(split, BorderLayout.CENTER);

    historyArea = new JTextArea();
    historyArea.setEditable(false);
    split.setLeftComponent(historyArea);

    JPanel downPanel = new JPanel();
    split.setRightComponent(downPanel);
    downPanel.setLayout(new BorderLayout());

    inputArea = new JTextArea();
    inputArea.setBorder(new LineBorder(Color.gray, 2));
    inputArea.addKeyListener(new KeyAdapter() {
      @Override
      public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_ENTER) {
          String message = inputArea.getText();
          sendMessage(message.trim());
          inputArea.setText(null);
        }
      }
    });
    downPanel.add(inputArea, BorderLayout.CENTER);

    JPanel buttonPanel = new JPanel();
    buttonPanel.setPreferredSize(new Dimension(90, 50));
    downPanel.add(buttonPanel, BorderLayout.EAST);

    JButton sendButton = new JButton("Send");
    buttonPanel.add(sendButton);
    sendButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        sendMessage(inputArea.getText());
        inputArea.setText(null);
      }
    });

    doLayout();
    setVisible(true);
    split.setDividerLocation(0.8);
  }

  public void sendMessage(String text) {
    attachText(ME, text);
    parent.getChatter().send(target, text);
  }

  @Override
  public void messageReceived(MessageEvent event) {
    Message msg = event.getContent();
    if (msg instanceof SendTextRequest && msg.getFrom().equals(this.target)) {
      // Receive a message
      SendTextRequest str = (SendTextRequest) msg;
      final String text = str.getText();
      SwingUtilities.invokeLater(new Runnable() {
        public void run() {
          attachText(target, text);
        }
      });
    }
  }

  public static final String ME = "Me";

  protected static final DateFormat dateFormat = new SimpleDateFormat("HH:mm");

  protected void attachText(String author, String content) {
    historyArea.append(MessageFormat.format("{0}  {1}:\n{2}\n", author,
        dateFormat.format(new Date()), content));
  }
}
TOP

Related Classes of ass3.program.ui.ChatFrame

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.