Aug 20
//Classe Master per la lavagna //classi supplementari importate import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import java.net.*; import java.io.*; import java.applet.*; //classe gestore eventi mouse class Mouse extends MouseInputAdapter{ Lavagna lav; int x; int y; int px; int py; Color col; public Mouse(Lavagna lavApp,Color color){ lav=lavApp; col=color; x=0; y=0; px=0; py=0; } public void mouseReleased(MouseEvent e){ px=0; py=0; x=0; y=0; } public void mouseDragged(MouseEvent e){ x=e.getX(); y=e.getY(); if((px!=0)&&(px!=0)){ if(MasterGraph.sts){ lav.erase(px,py,x,y); }else{ lav.draw(px,py,x,y,col); } MasterGraph.sendPoint(""+px+"_"+py+"_"+x+"_"+y+"_*"); } px=x; py=y; } public void setColor(Color color){ col=color; } } // classe finta per catturare l' oggetto Image class Finta extends Applet{ public void init(){ setBackground(Color.white); } } // classe lavagna elettronica class Lavagna extends Canvas{ int px; int py; int x; int y; Color col; Graphics g; Image im; public Lavagna(){ px=0; py=0; x=0; y=0; col=Color.black; } public void initG(Finta applet,int x,int y){ im = applet.createImage(x,y); g = im.getGraphics(); } public void draw(int px,int py,int x,int y,Color col){ this.px=px; this.py=py; this.x=x; this.y=y; this.col=col; g.setColor(col); g.drawLine(px,py,x,y); repaint(); } public void erase(int px,int py,int x,int y){ g.setColor(Color.white); g.drawLine(px,py,x,y); repaint(); } public void paint(Graphics g){ g.drawImage(im,0,0,this); } } // classe principale public class MasterGraph extends JFrame{ static Lavagna lavagna; Mouse mouse; Color color; static DatagramPacket pOut; static MulticastSocket mcSock; static InetAddress ia; JButton bRed; JButton bBlack; JButton bBlue; JButton bYellow; JButton bMagenta; JButton bGreen; JButton bGray; JButton bOrange; JButton bPink; JButton bCyan; JButton jbuSelected; JToggleButton jtbStatus; static boolean sts; public MasterGraph(String title){ super(title); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(300,300); setResizable(false); try{ mcSock=new MulticastSocket(2000); }catch(IOException e){ JOptionPane.showMessageDialog(null,"Impossibile aprire porta 2000!nIl programma verrà terminato."); System.exit(0); } sts=false; color=Color.black; jtbStatus=new JToggleButton("P"); jtbStatus.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ if(jtbStatus.isSelected()){ jtbStatus.setText("E"); sts=true; sendStatus(1); }else{ jtbStatus.setText("P"); sts=false; sendStatus(0); } } }); JPanel jpaStatus=new JPanel(); jpaStatus.add(jtbStatus); jbuSelected=new JButton(); jbuSelected.setBackground(color); JPanel jpa=new JPanel(); jpa.add(jbuSelected); bRed=new JButton(); bRed.setBackground(Color.red); bRed.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ color=bRed.getBackground(); jbuSelected.setBackground(color); mouse.setColor(color); sendColor(); } }); bBlue=new JButton(); bBlue.setBackground(Color.blue); bBlue.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ color=bBlue.getBackground(); jbuSelected.setBackground(color); mouse.setColor(color); sendColor(); } }); bBlack=new JButton(); bBlack.setBackground(Color.black); bBlack.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ color=bBlack.getBackground(); jbuSelected.setBackground(color); mouse.setColor(color); sendColor(); } }); bGray=new JButton(); bGray.setBackground(Color.gray); bGray.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ color=bGray.getBackground(); jbuSelected.setBackground(color); mouse.setColor(color); sendColor(); } }); bGreen=new JButton(); bGreen.setBackground(Color.green); bGreen.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ color=bGreen.getBackground(); jbuSelected.setBackground(color); mouse.setColor(color); sendColor(); } }); bMagenta=new JButton(); bMagenta.setBackground(Color.magenta); bMagenta.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ color=bMagenta.getBackground(); jbuSelected.setBackground(color); mouse.setColor(color); sendColor(); } }); bOrange=new JButton(); bOrange.setBackground(Color.orange); bOrange.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ color=bOrange.getBackground(); jbuSelected.setBackground(color); mouse.setColor(color); sendColor(); } }); bPink=new JButton(); bPink.setBackground(Color.pink); bPink.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ color=bPink.getBackground(); jbuSelected.setBackground(color); mouse.setColor(color); sendColor(); } }); bYellow=new JButton(); bYellow.setBackground(Color.yellow); bYellow.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ color=bYellow.getBackground(); jbuSelected.setBackground(color); mouse.setColor(color); sendColor(); } }); bCyan=new JButton(); bCyan.setBackground(Color.cyan); bCyan.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ color=bCyan.getBackground(); jbuSelected.setBackground(color); mouse.setColor(color); sendColor(); } }); JPanel pColor=new JPanel(); pColor.setLayout(new GridLayout(2,5)); pColor.add(bBlack); pColor.add(bBlue); pColor.add(bRed); pColor.add(bGray); pColor.add(bGreen); pColor.add(bMagenta); pColor.add(bOrange); pColor.add(bPink); pColor.add(bYellow); pColor.add(bCyan); JPanel panel=new JPanel(); panel.add(jpaStatus); panel.add(jpa); panel.add(pColor); lavagna= new Lavagna(); Dimension dim=this.getToolkit().getScreenSize(); lavagna.setBackground(Color.white); Finta f = new Finta(); f.init(); Container contentPane=getContentPane(); contentPane.add(f,"Center"); contentPane.add(panel,"South"); setVisible(true); lavagna.initG(f,dim.width,dim.height-60); contentPane.remove(f); contentPane.add(lavagna); contentPane.validate(); mouse=new Mouse(lavagna,color); lavagna.addMouseMotionListener(mouse); lavagna.addMouseListener(mouse); } public void sendStatus(int idx){ try{ String s=null; if(idx==1){ s=":1"; }else if(idx==0){ s=":0"; }else{ s=":0"; } pOut=new DatagramPacket(s.getBytes(),s.length(),ia.getLocalHost(),2000); mcSock.send(pOut); }catch(SocketException se){ System.out.print(se.getMessage()); }catch(IOException ioe){ System.out.print(ioe.getMessage()); } } public void sendColor(){ try{ String s=":"+color.getRGB(); pOut=new DatagramPacket(s.getBytes(),s.length(),ia.getLocalHost(),2000); mcSock.send(pOut); }catch(SocketException se){ System.out.print(se.getMessage()); }catch(IOException ioe){ System.out.print(ioe.getMessage()); } } public static void sendPoint(String sApp){ try{ System.out.print(sApp+"n"); String s=" :"+sApp; pOut=new DatagramPacket(s.getBytes(),s.length(),ia.getLocalHost(),2000); mcSock.send(pOut); }catch(SocketException se){ System.out.print(se.getMessage()); }catch(IOException ioe){ System.out.print(ioe.getMessage()); } } public static void main(String[] args){ MasterGraph frame=new MasterGraph("MasterGraph"); } } // Classe slave per lavagna elettronica // classi supplementari importate import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import java.net.*; import java.io.*; import java.applet.*; // classe finta per catturare l' oggetto Image class Finta extends Applet{ public void init(){ setBackground(Color.white); } } // classe lavagna elettronica class Lavagna extends Canvas{ int px; int py; int x; int y; Color col; Graphics g; Image im; public Lavagna(){ px=0; py=0; x=0; y=0; col=null; } public void initG(Finta applet,int x,int y){ im = applet.createImage(x,y); g = im.getGraphics(); } public void draw(int px,int py,int x,int y,Color col){ this.px=px; this.py=py; this.x=x; this.y=y; this.col=col; g.setColor(col); g.drawLine(px,py,x,y); repaint(); } public void erase(int px,int py,int x,int y){ g.setColor(Color.white); g.drawLine(px,py,x,y); repaint(); } public void paint(Graphics g){ g.drawImage(im,0,0,this); } } // classe principale public class SlaveGraph extends JFrame implements Runnable{ Color color; DatagramPacket pIn; MulticastSocket mcSock; Lavagna lavagna; boolean sts; public SlaveGraph(String title){ super(title); setDefaultCloseOperation(EXIT_ON_CLOSE); setLocation(400,300); setSize(300,260); setResizable(false); try{ mcSock=new MulticastSocket(2000); }catch(IOException e){ JOptionPane.showMessageDialog(null,"Impossibile aprire porta 2000!nIl programma verrà terminato."); System.exit(0); } sts=false; color=Color.black; lavagna= new Lavagna(); Dimension dim=this.getToolkit().getScreenSize(); lavagna.setBackground(Color.white); Finta f = new Finta(); f.init(); Container contentPane=getContentPane(); contentPane.add(f,"Center"); setVisible(true); lavagna.initG(f,dim.width,dim.height); contentPane.remove(f); contentPane.add(lavagna); contentPane.validate(); new Thread(this).start(); } public int choose(String sApp){ if(sApp.equals(":")){ return 1; }else if(sApp.equals(":")){ return 2; }else if(sApp.equals(":")){ return 3; }else if(sApp.equals(" :")){ return 0; }else return 4; } public synchronized void draw(String sApp){ int[] vet=new int[4]; char[] bf=sApp.toCharArray(); String app=""; String s=""; int count=0; for(int i=0;i s=""+bf[i]; if(s.equals("_")){ try{ vet[count]=Integer.parseInt(app); app=""; count++; }catch(NumberFormatException nfe){ System.out.print(nfe.getMessage()); } }else if(s.equals("*")){ System.out.print(""+vet[0]+","+vet[1]+","+vet[2]+","+vet[3]+"n"); if((vet[0]!=0)&&(vet[1]!=0)){ if(sts){ lavagna.erase(vet[0],vet[1],vet[2],vet[3]); }else{ lavagna.draw(vet[0],vet[1],vet[2],vet[3],color); } } }else{ app+=bf[i]; } } } public void run(){ while(true){ try{ pIn=new DatagramPacket(new byte[1024],1024); mcSock.receive(pIn); String app=new String(pIn.getData(),0,pIn.getLength()); switch(choose(app.substring(0,4))){ case 0: draw(app.substring(4,app.length())); break; case 1: String s=app.substring(4,app.length()); try{ color=new Color(Integer.parseInt(s)); }catch(NumberFormatException nfe){ color=Color.black; } break; case 2: break; case 3: try{ int stat=Integer.parseInt(app.substring(4,app.length())); if(stat==1){ sts=true; }else if(stat==0){ sts=false; }else if(stat==2){ // erase all; sts=false; }else{ sts=false; } }catch(NumberFormatException nfe){ } break; case 4: break; } }catch(IOException ioe){ } } } public static void main(String[] args){ SlaveGraph frame=new SlaveGraph("SlaveGraph"); } }




























