Lesson 3

Post Reply
admin
Site Admin
Posts: 3118
Joined: Wed Dec 11, 2019 8:31 am
Has thanked: 4 times

Lesson 3

Post by admin »

Create the project PlotDemo1.
admin
Site Admin
Posts: 3118
Joined: Wed Dec 11, 2019 8:31 am
Has thanked: 4 times

Re: Lesson 3

Post by admin »

  1. package plotdemo1;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. class PlotFrame extends Frame{
  5. PlotFrame(int H,int W){
  6. setTitle("Function graphic");
  7. setBounds(100,50,W,H);
  8. setBackground(Color.GRAY);
  9. setLayout(null);
  10. Font f=new Font("Arial",Font.BOLD,11);
  11. setFont(f);
  12. BPanel BPnl=new BPanel(6,25,W/4,H-30);
  13. add(BPnl);
  14. PPanel PPnl=new PPanel(W/4+10,25,3*W/4-15,H-120,BPnl);
  15. add(PPnl);
  16. addWindowListener(new WindowAdapter(){
  17. public void windowClosing(WindowEvent ve){
  18. System.exit(0);}
  19. });
  20. BPnl.B1.addActionListener(new Button1Pressed(BPnl,PPnl));
  21. BPnl.B2.addActionListener(new Button2Pressed());
  22. setResizable(false);
  23. setVisible(true);
  24. }}
  25. class BPanel extends Panel{
  26. public Label[] L;
  27. public CheckboxGroup CbG;
  28. public Checkbox[] Cb;
  29. public Choice Ch;
  30. public TextField TF, TF1;
  31. public Button B1,B2;
  32. BPanel(int x,int y,int W,int H){
  33. setLayout(null);
  34. setBounds(x,y,W,H);
  35. setBackground(Color.LIGHT_GRAY);
  36. L=new Label[5];
  37. CbG=new CheckboxGroup();
  38. Cb=new Checkbox[1];
  39. Cb[0]=new Checkbox(" Grid ",true);
  40. Cb[0].setBounds(5,30,getWidth()-10,30);
  41. add(Cb[0]);
  42. L[1]=new Label("Interval along x:",Label.CENTER);
  43. L[1].setFont(new Font("Arial",Font.BOLD,12));
  44. L[1].setBounds(5,100,getWidth()-10,30);
  45. add(L[1]);
  46. L[2]=new Label("x=0 to x=",Label.LEFT);
  47. L[2].setBounds(5,130,70,20);
  48. add(L[2]);
  49. TF=new TextField("10");
  50. TF.setBounds(75,130,45,20);
  51. add(TF);
  52. L[3]=new Label("Interval along y:",Label.CENTER);
  53. L[3].setFont(new Font("Arial",Font.BOLD,12));
  54. L[3].setBounds(5,170,getWidth()-10,30);
  55. add(L[3]);
  56. L[4]=new Label("y=0 to y=",Label.LEFT);
  57. L[4].setBounds(5,200,70,20);
  58. add(L[4]);
  59. TF1=new TextField("10");
  60. TF1.setBounds(75,200,45,20);
  61. add(TF1);
  62. B1=new Button("Plot");
  63. B2=new Button("Close");
  64. B1.setBounds(5,getHeight()-75,getWidth()-10,30);
  65. B2.setBounds(5,getHeight()-35,getWidth()-10,30);
  66. add(B1);
  67. add(B2);
  68. }}
  69. class PPanel extends Panel{
  70. public Plotter G;
  71. class Plotter{
  72. private double Xmin=0,Xmax,Ymin=0,Ymax=2.0;
  73. private boolean status;
  74. private Color clr;
  75. private Color gclr;
  76. Plotter(BPanel P){
  77. try{
  78. Xmax=Double.valueOf(P.TF.getText());}
  79. catch(NumberFormatException e){
  80. P.TF.setText("10");
  81. Xmax=10;}
  82. try{
  83. Ymax=Double.valueOf(P.TF1.getText());}
  84. catch(NumberFormatException e){
  85. P.TF1.setText("10");
  86. Ymax=10;}
  87. status=P.Cb[0].getState();
  88. }
  89. private double f(double x){
  90. return (Math.sin(x)/x);}
  91. public Plotter remember(BPanel P){
  92. return new Plotter(P);}
  93. public void plot(Graphics Fig){
  94. int H,W,h,w,s=20;
  95. H=getHeight();
  96. W=getWidth();
  97. h=H-2*s;
  98. w=W-2*s;
  99. Fig.clearRect(0,0,W,H);
  100. int k,nums=10;
  101. Fig.setColor(Color.BLACK);
  102. Fig.drawLine(s,s,s,h+s);
  103. Fig.drawLine(s,s+h,s+w,s+h);
  104. for(k=0;k<=nums;k++){
  105. Fig.drawLine(s+k*w/nums,s+h,s+k*w/nums,s+h+5);
  106. Fig.drawLine(s-5,s+k*h/nums,s,s+k*h/nums);
  107. Fig.drawString(Double.toString(Xmin+k*(Xmax-Xmin)/nums),s+k*w/nums-5,s+h+15);
  108. Fig.drawString(Double.toString(Ymin+k*(Ymax-Ymin)/nums),s-17,s+h-1-k*h/nums);
  109. }
  110. if(status){
  111. Fig.setColor(Color.GRAY);
  112. for(k=1;k<=nums;k++){
  113. Fig.drawLine(s+k*w/nums,s,s+k*w/nums,h+s);
  114. Fig.drawLine(s,s+(k-1)*h/nums,s+w,s+(k-1)*h/nums);
  115. }}
  116. Fig.setColor(Color.RED);
  117. double dx=(Xmax-Xmin)/w,dy=(Ymax-Ymin)/h;
  118. double x1,x2,y1,y2;
  119. int h1,h2,w1,w2;
  120. x1=Xmin;
  121. y1=f(x1);
  122. w1=s;
  123. h1=h+s-(int)Math.round(y1/dy);
  124. int step=2;
  125. for(int i=step;i<=w;i+=step){
  126. x2=i*dx;
  127. y2=f(x2);
  128. w2=s+(int)Math.round(x2/dx);
  129. h2=h+s-(int)Math.round(y2/dy);
  130. Fig.drawLine(w1,h1,w2,h2);
  131. Fig.drawRect(w1-2,h1-2,4,4);
  132. x1=x2;
  133. y1=y2;
  134. w1=w2;
  135. h1=h2;}
  136. }}
  137. PPanel(int x,int y,int W,int H,BPanel P){
  138. G=new Plotter(P);
  139. setBackground(Color.WHITE);
  140. setBounds(x,y,W,H);
  141. }
  142. public void paint(Graphics g){
  143. G.plot(g);
  144. }}
  145. class Button1Pressed implements ActionListener{
  146. private BPanel P1;
  147. private PPanel P2;
  148. Button1Pressed(BPanel P1,PPanel P2){
  149. this.P1=P1;
  150. this.P2=P2;}
  151. public void actionPerformed(ActionEvent ae){
  152. P2.G=P2.G.remember(P1);
  153. P2.G.plot(P2.getGraphics());
  154. }}
  155. class Button2Pressed implements ActionListener{
  156. public void actionPerformed(ActionEvent ae){
  157. System.exit(0);
  158. }}
  159. class cbChanged implements ItemListener{
  160. private Choice ch;
  161. cbChanged(BPanel P){
  162. this.ch=P.Ch;}
  163. public void itemStateChanged(ItemEvent ie){
  164. ch.setEnabled(ie.getStateChange()==ie.SELECTED);
  165. }}
  166. class PlotDemo1{
  167. public static void main(String args[]){
  168. new PlotFrame(400,500);}
  169. }
admin
Site Admin
Posts: 3118
Joined: Wed Dec 11, 2019 8:31 am
Has thanked: 4 times

Re: Lesson 3

Post by admin »

Code: Select all

package plotdemo1;
import java.awt.*;
import java.awt.event.*;
class PlotFrame extends Frame{
PlotFrame(int H,int W){
setTitle("Function graphic");
setBounds(100,50,W,H); 
setBackground(Color.GRAY); 
setLayout(null); 
Font f=new Font("Arial",Font.BOLD,11); 
setFont(f); 
BPanel BPnl=new BPanel(6,25,W/4,H-30); 
add(BPnl);
PPanel PPnl=new PPanel(W/4+10,25,3*W/4-15,H-120,BPnl);
add(PPnl);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent ve){
System.exit(0);} 
});
BPnl.B1.addActionListener(new Button1Pressed(BPnl,PPnl));
BPnl.B2.addActionListener(new Button2Pressed());
setResizable(false);
setVisible(true);
}}
class BPanel extends Panel{
public Label[] L;
public CheckboxGroup CbG;
public Checkbox[] Cb;
public Choice Ch;
public TextField TF, TF1;
public Button B1,B2;
BPanel(int x,int y,int W,int H){
setLayout(null);
setBounds(x,y,W,H); 
setBackground(Color.LIGHT_GRAY); 
L=new Label[5];
CbG=new CheckboxGroup();
Cb=new Checkbox[1];
Cb[0]=new Checkbox(" Grid ",true);
Cb[0].setBounds(5,30,getWidth()-10,30); 
add(Cb[0]);
L[1]=new Label("Interval along x:",Label.CENTER);
L[1].setFont(new Font("Arial",Font.BOLD,12));
L[1].setBounds(5,100,getWidth()-10,30);
add(L[1]);
L[2]=new Label("x=0 to x=",Label.LEFT);
L[2].setBounds(5,130,70,20);
add(L[2]);
TF=new TextField("10");
TF.setBounds(75,130,45,20);
add(TF);
L[3]=new Label("Interval along y:",Label.CENTER);
L[3].setFont(new Font("Arial",Font.BOLD,12));
L[3].setBounds(5,170,getWidth()-10,30);
add(L[3]);
L[4]=new Label("y=0 to y=",Label.LEFT);
L[4].setBounds(5,200,70,20);
add(L[4]);
TF1=new TextField("10");
TF1.setBounds(75,200,45,20);
add(TF1);
B1=new Button("Plot");
B2=new Button("Close");
B1.setBounds(5,getHeight()-75,getWidth()-10,30);
B2.setBounds(5,getHeight()-35,getWidth()-10,30);
add(B1); 
add(B2); 
}}
class PPanel extends Panel{
public Plotter G;
class Plotter{
private double Xmin=0,Xmax,Ymin=0,Ymax=2.0;
private boolean status;
private Color clr;
private Color gclr;
Plotter(BPanel P){
try{
Xmax=Double.valueOf(P.TF.getText());}
catch(NumberFormatException e){
P.TF.setText("10");
Xmax=10;}
try{
Ymax=Double.valueOf(P.TF1.getText());}
catch(NumberFormatException e){
P.TF1.setText("10");
Ymax=10;}
status=P.Cb[0].getState();
}
private double f(double x){
return (Math.sin(x)/x);}
public Plotter remember(BPanel P){
return new Plotter(P);}
public void plot(Graphics Fig){
int H,W,h,w,s=20;
H=getHeight();
W=getWidth();
h=H-2*s;
w=W-2*s;
Fig.clearRect(0,0,W,H);
int k,nums=10;
Fig.setColor(Color.BLACK);
Fig.drawLine(s,s,s,h+s);
Fig.drawLine(s,s+h,s+w,s+h);
for(k=0;k<=nums;k++){
Fig.drawLine(s+k*w/nums,s+h,s+k*w/nums,s+h+5);
Fig.drawLine(s-5,s+k*h/nums,s,s+k*h/nums);
Fig.drawString(Double.toString(Xmin+k*(Xmax-Xmin)/nums),s+k*w/nums-5,s+h+15);
Fig.drawString(Double.toString(Ymin+k*(Ymax-Ymin)/nums),s-17,s+h-1-k*h/nums);
}
if(status){
Fig.setColor(Color.GRAY);
for(k=1;k<=nums;k++){
Fig.drawLine(s+k*w/nums,s,s+k*w/nums,h+s);
Fig.drawLine(s,s+(k-1)*h/nums,s+w,s+(k-1)*h/nums);
}}
Fig.setColor(Color.RED); 
double dx=(Xmax-Xmin)/w,dy=(Ymax-Ymin)/h;
double x1,x2,y1,y2;
int h1,h2,w1,w2;
x1=Xmin;
y1=f(x1);
w1=s;
h1=h+s-(int)Math.round(y1/dy);
int step=2;
for(int i=step;i<=w;i+=step){
x2=i*dx;
y2=f(x2);
w2=s+(int)Math.round(x2/dx);
h2=h+s-(int)Math.round(y2/dy);
Fig.drawLine(w1,h1,w2,h2);
Fig.drawRect(w1-2,h1-2,4,4);
x1=x2;
y1=y2;
w1=w2;
h1=h2;}
}}
PPanel(int x,int y,int W,int H,BPanel P){
G=new Plotter(P);
setBackground(Color.WHITE);
setBounds(x,y,W,H);
}
public void paint(Graphics g){
G.plot(g);
}}
class Button1Pressed implements ActionListener{
private BPanel P1;
private PPanel P2;
Button1Pressed(BPanel P1,PPanel P2){
this.P1=P1;
this.P2=P2;}
public void actionPerformed(ActionEvent ae){
P2.G=P2.G.remember(P1);
P2.G.plot(P2.getGraphics());
}}
class Button2Pressed implements ActionListener{
public void actionPerformed(ActionEvent ae){
System.exit(0);
}}
class cbChanged implements ItemListener{
private Choice ch;
cbChanged(BPanel P){
this.ch=P.Ch;}
public void itemStateChanged(ItemEvent ie){
ch.setEnabled(ie.getStateChange()==ie.SELECTED);
}}
class PlotDemo1{
public static void main(String args[]){
new PlotFrame(400,500);}
}
admin
Site Admin
Posts: 3118
Joined: Wed Dec 11, 2019 8:31 am
Has thanked: 4 times

Re: Lesson 3

Post by admin »

The screenshot of PlotDemo1.
Attachments
plotdemo1.png
plotdemo1.png (13.63 KiB) Viewed 526 times
admin
Site Admin
Posts: 3118
Joined: Wed Dec 11, 2019 8:31 am
Has thanked: 4 times

Re: Lesson 3

Post by admin »

This project creates the graphic of the function sin(x)/x.
Post Reply