Lesson 3
Posted: Sat Apr 18, 2020 3:16 am
Create the project PlotDemo1.
Easy English Study
https://easy-english-study.com/forum/
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);}
}