import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; public class waveApplet extends JApplet{ wavePanel WP; JTextField tf; int[] signal; public void init(){ Container cp=getContentPane(); WP=new wavePanel(); cp.add(WP,"Center"); } } class wavePanel extends JPanel implements MouseMotionListener{ int[] values; double value1, value2; int SIGNAL_Y=100, //bottom of signal plot CARRIER_Y=200, //Y for carrier=0 AM_Y=300, //Y for AM=0; FM_Y=400, //Y for FM=0; CARRIER_T=20, //period of carrier in pixels CARRIER_A=20, //amplitude of carrier in pixels MAX_SIGNAL=30, //max amplitude of signal moving=0; //index of point being dragged boolean dragging; //true if in process of changing signal wavePanel(){ values=new int[10]; Arrays.fill(values, 15); dragging=false; addMouseListener(new MouseAdapter(){ public void mousePressed(MouseEvent me){ int x=me.getX(); int y=me.getY(); int tempMoving=(x+5)/50; if(Math.abs(tempMoving-4.5)>4.5) return; if((Math.abs(x-15-50*tempMoving)<=10)&& (Math.abs(adjustY(y)-values[tempMoving])<=10)){ moving=tempMoving; dragging=true; } } public void mouseReleased(MouseEvent me){ if(dragging){ values[moving]=adjustY(me.getY()); dragging=false; repaint(); } } }); } public void mouseMoved(MouseEvent me){} public void mouseDragged(MouseEvent me){ if(!dragging) return; int yadj=adjustY(me.getY()); values[moving]=yadj; repaint(); } int adjustY(int y){ //adjust for location within the panel int newy=SIGNAL_Y-y; if(newy<0) newy=0; else if(newy>MAX_SIGNAL) newy=MAX_SIGNAL; return newy; } public void paintComponent(Graphics g){ super.paintComponent(g); g.setColor(Color.black); int last=values[0]; g.drawString("Signal to be Transmitted", 15, 30); g.drawOval(15, SIGNAL_Y-values[0], 3, 3); for(int m=1;m<10;m++){ int current=values[m]; g.drawLine(15+50*(m-1),SIGNAL_Y-last,15+50*m,SIGNAL_Y-current); g.drawOval(15+50*m, SIGNAL_Y-values[m], 3, 3); last=current; } if(dragging) return; value1=values[0]; double num1=0; double num2=1-MAX_SIGNAL/2.0*0.02+0.02*values[0]; for(int x=0;x<449;x++){ int interval=x/50; value2=values[interval]+((x+1-50*interval) *(values[interval+1]-values[interval])/50.0); g.drawString("Carrier Wave", 15, CARRIER_Y-CARRIER_A-20); g.drawLine(15+x,(int)(CARRIER_Y-CARRIER_A*Math.sin(2*Math.PI*x/CARRIER_T)), 16+x, (int)(CARRIER_Y-CARRIER_A*Math.sin(2*Math.PI*(x+1)/CARRIER_T))); //the carrier g.drawString("AM Radio Wave", 15, AM_Y-2*CARRIER_A-20); g.drawLine(15+x,(int)(AM_Y-CARRIER_A*2.0/MAX_SIGNAL*(2+value1)*Math.sin(2* Math.PI*x/CARRIER_T)), 16+x, (int)(AM_Y-CARRIER_A*2.0/MAX_SIGNAL*(2+ value2)*Math.sin(2*Math.PI*(x+1)/CARRIER_T))); //the AM wave num1+=1-MAX_SIGNAL/2.0*0.02+0.02*value1; //phase of next point num2+=1-MAX_SIGNAL/2.0*0.02+0.02*value2; g.drawString("FM Radio Wave", 15, FM_Y-CARRIER_A-20); g.drawLine(15+x, (int)(FM_Y-CARRIER_A*Math.sin(2*Math.PI*num1/CARRIER_T)), 16+x,(int)( FM_Y-CARRIER_A*Math.sin(2*Math.PI*num2/CARRIER_T)));//the FM wave value1=value2; } } }