Package

Source Code of Client

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.io.Serializable;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import edu.cmu.relativelayout.Binding;
import edu.cmu.relativelayout.BindingFactory;
import edu.cmu.relativelayout.RelativeConstraints;
import edu.cmu.relativelayout.RelativeLayout;

public class Client implements ActionListener, ClientInterface, Serializable {
  private static final long serialVersionUID = 1L;

  Graphics g;
  JFrame frame;
  JTextArea area;
  Dimension dim;
  public static JPanel panel;
  MyCanvas paintCanvas;
  JScrollPane chatPane, userList;
  JTextField inputField;
  JButton sendButton;
  BindingFactory bf;
  RelativeConstraints chatPaneConstraints, paintCanvasConstraints,
      inputFieldConstraints, userListConstraints, sendButtonConstrains;

  int x1, y1, x2, y2;

  static int roomNo;
  static ServerInterface serverObj;
  public static Client object;
  JTextArea users;
  public static String userName;

  public Client() {

    area = new JTextArea();
    users = new JTextArea();
    area.setEditable(false);
    area.setBackground(new Color(255, 255, 153));
    frame = new JFrame("Discussion Room");
    panel = new JPanel(new RelativeLayout());
    chatPane = new JScrollPane(area);
    userList = new JScrollPane(users);
    paintCanvas = new MyCanvas();
    inputField = new JTextField();
    sendButton = new JButton("Send");
    bf = new BindingFactory(10, 10, 10, 10, 10, 10);
    dim = Toolkit.getDefaultToolkit().getScreenSize();
  }

  public void initializeLayout() {
    Binding leftEdge = bf.leftEdge();
    Binding topEdge = bf.topEdge();
    Binding aboveInputField = bf.above(inputField);

    // PAINT CANVAS
    // paintCanvas properties
    paintCanvas.setBorder(BorderFactory.createLineBorder(new Color(161,
        112, 23), 3));
    paintCanvas.setSize(200, 500);
    paintCanvas.setBackground(new Color(204, 204, 204));
    // paintCanvas.setCursor(Cursor.getPredefinedCursor(Cursor.));

    Toolkit toolkit = Toolkit.getDefaultToolkit();
    Image image = toolkit.getImage("images/Brush.png");
    Cursor c = toolkit.createCustomCursor(image,
        new Point(paintCanvas.getX(), paintCanvas.getY()), "img");
    paintCanvas.setCursor(c);

    paintCanvas.addMouseMotionListener(new MouseMotionListener() {

      @Override
      public void mouseMoved(MouseEvent arg0) {
      }

      @Override
      public void mouseDragged(MouseEvent e) {
        x2 = e.getX();
        y2 = e.getY();

        try {
          serverObj.setPoints(roomNo, x1, y1, x2, y2);
        } catch (RemoteException e1) {
          e1.printStackTrace();
        }

        x1 = e.getX();
        y1 = e.getY();
      }
    });

    paintCanvas.addMouseListener(new MouseListener() {

      @Override
      public void mouseReleased(MouseEvent e) {
      }

      @Override
      public void mousePressed(MouseEvent e) {
        x1 = e.getX();
        y1 = e.getY();
      }

      @Override
      public void mouseExited(MouseEvent e) {
      }

      @Override
      public void mouseEntered(MouseEvent e) {
      }

      @Override
      public void mouseClicked(MouseEvent e) {
      }
    });

    Binding leftOfUserList = bf.leftOf(userList);
    paintCanvasConstraints = new RelativeConstraints(leftEdge,
        leftOfUserList, topEdge, aboveInputField);

    // User List
    userList.setBackground(new Color(102, 255, 153));
    userList.setPreferredSize(new Dimension(200, userList.getHeight()));
    users.setEditable(false);
    Binding rightEdge = bf.rightEdge();
    userListConstraints = new RelativeConstraints(topEdge, rightEdge,
        aboveInputField);

    // Input Field
    inputField.setEnabled(true);
    inputField.setVisible(true);
    inputField.setPreferredSize(new Dimension(700, 30));
    Binding bottomEdge = bf.bottomEdge();
    Binding leftOfSendButton = bf.leftOf(sendButton);
    Binding aboveChatPane = bf.above(chatPane);
    inputFieldConstraints = new RelativeConstraints(leftEdge,
        aboveChatPane, leftOfSendButton);

    // Send Button
    sendButton.setEnabled(true);
    sendButton.addActionListener(this);
    sendButton.setPreferredSize(new Dimension(150, 30));
    Binding ver = bf.verticallyCenterAlignedWith(inputField);
    sendButtonConstrains = new RelativeConstraints(rightEdge, ver);
    chatPane.setBackground(new Color(255, 255, 153));
    chatPane.setPreferredSize(new Dimension(1000, 100));
    chatPaneConstraints = new RelativeConstraints(leftEdge, bottomEdge,
        rightEdge);

  }

  public void addToGui() {

    panel.add(paintCanvas, paintCanvasConstraints);
    panel.add(userList, userListConstraints);
    panel.add(inputField, inputFieldConstraints);
    panel.add(sendButton, sendButtonConstrains);
    panel.add(chatPane, chatPaneConstraints);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(panel);
    frame.setSize(500, 500);
    frame.setVisible(true);
  }

  public void actionPerformed(ActionEvent e) {
    String msg = inputField.getText().toString();
    inputField.setText(" ");
    // area.append(s + "\n");
    try {
      serverObj.setMessage(roomNo, userName, msg);
    } catch (RemoteException e1) {
      e1.printStackTrace();
    }
  }

  public static void main(String[] args) {
    // TODO code application logic here

    EventQueue.invokeLater(new Runnable() {
      public void run() {
        try {

          object = new Client();

          // frame.setExtendedState(Frame.MAXIMIZED_BOTH);

          serverObj = (ServerInterface) Naming
              .lookup("rmi://127.0.0.1:" + constants.portNo
                  + "/DiscussionServer");

          UnicastRemoteObject.exportObject(object, 0);

          Scanner sc = new Scanner(System.in);
          System.out.println("Enter User Name : ");
          userName = sc.next();

          int flag = 0;
          Map<Integer, String> rooms = serverObj.getRooms();
          Iterator<Entry<Integer, String>> it = rooms.entrySet()
              .iterator();
          while (it.hasNext()) {
            flag = 1;
            Map.Entry<Integer, String> pairs = (Map.Entry<Integer, String>) it
                .next();
            System.out.println(pairs.getKey() + " : "
                + pairs.getValue());
            it.remove();
          }

          if (flag == 0) {
            System.out
                .println("No rooms available...\nEnter -1 to create new room : ");
          } else {
            System.out
                .println("Enter room number...\nEnter -1 to create new room : ");
          }

          int number = sc.nextInt();

          if (number == -1) {
            System.out.println("Enter room name : ");
            String roomName = sc.next();
            if (roomName != null) {
              roomNo = serverObj.createRoom(object, roomName,
                  userName);
            }
          } else {
            roomNo = number;
            serverObj.register(object, number, userName);
          }
          System.out.println("Room No : " + roomNo);

          object.initializeLayout();
          object.addToGui();
          // serverObj.register(frame);

        } catch (MalformedURLException e) {
          e.printStackTrace();
        } catch (RemoteException e) {
          e.printStackTrace();
        } catch (NotBoundException e) {
          e.printStackTrace();
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    });

    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {

      @Override
      public void run() {
        System.out.println("Unregistering !!");
        try {
          serverObj.unRegister(object);
        } catch (RemoteException e) {
          e.printStackTrace();
        }
      }
    }));

  }

  @Override
  public void getPoints(int x1, int y1, int x2, int y2)
      throws RemoteException {
    paintCanvas.DrawLine(x1, y1, x2, y2);
  }

  @Override
  public void getMembers(String memberList) throws RemoteException {
    users.setText("Members : \n");
    users.append(memberList);
  }

  @Override
  public void getMessage(String chatMessage) throws RemoteException {
    area.append(chatMessage + "\n");
  }
}
TOP

Related Classes of Client

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.