Lesson 3
Re: Lesson 3
- 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);}
- }
Re: Lesson 3
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);}
}