/** *Class Draw is the GUI class for this distributed drawing application *Internetprogrammering 1 - Course *@author Martin Carlsson */ import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; import java.net.*; import java.io.*; public class Draw extends JFrame { private Sender sender; private Receiver receiver; public Draw(int myPort, InetAddress toAdr, int toPort) throws IOException { sender = new Sender(toAdr, toPort); Paper paper = new Paper(sender); receiver = new Receiver(myPort, paper); receiver.start(); setDefaultCloseOperation(EXIT_ON_CLOSE); getContentPane().add(paper, BorderLayout.CENTER); setSize(640, 480); show(); } WindowAdapter closeWindow=new WindowAdapter() { public void windowClosing(WindowEvent e){ sender.closeSendSocket(); receiver.closeReceiveSocket(); System.exit(0); } }; //Main public static void main(String[] args) throws Exception { System.err.println("\nUsage:\n"); if(args.length == 3) { try { int myPort = Integer.parseInt(args[0]); InetAddress toAdr = InetAddress.getByName(args[1]); int toPort = Integer.parseInt(args[2]); Draw draw = new Draw(myPort,toAdr,toPort); } catch(UnknownHostException uHe) { System.err.println("Cant find host"+args[1]); } catch(NumberFormatException nFe) { System.err.println("Bad port, need to be a number between 0 and 65535"); } } else System.err.println("\nUsage:\n"); } } // class Draw /* Class paper represents the middle area*/ class Paper extends JPanel { private HashSet hs = new HashSet(); private Sender sender; public Paper(Sender sender) { this.sender = sender; setBackground(Color.white); addMouseListener(new L1()); addMouseMotionListener(new L2()); } // Used for painting the pixels protected synchronized void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.black); Iterator i = hs.iterator(); while(i.hasNext()) { Point p = (Point)i.next(); g.fillOval(p.x, p.y, 3, 3); } } // Adds a pixel to the Hashset and repaints protected synchronized void addPoint(Point p) { hs.add(p); repaint(); } /*Listens to when the mouse is pressed*/ private class L1 extends MouseAdapter { public void mousePressed(MouseEvent me) { Point p= me.getPoint(); addPoint(p); sender.sendAway(p); } } /*Listens to when the mouse is dragged*/ private class L2 extends MouseMotionAdapter { public void mouseDragged(MouseEvent me) { Point p = me.getPoint(); addPoint(p); sender.sendAway(p); } } } // End class Paper