Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.*;
- import java.awt.event.*;
- class PlotFrame extends Frame{
- PlotFrame(int H, int W){
- setTitle("График функции");
- setBounds(100,50,W,H);
- setBackground(Color.GRAY);
- setLayout(null);
- Font f = new Font("Arial",Font.BOLD,11);
- setFont(f);
- Bpanel BPn1=new Bpanel(6,25,W/4,H-30);
- add(BPn1);
- PPanel PPn1 = new PPanel(W/4+10,25,3*W/4-15,H-120,BPn1);
- add(PPn1);
- HPanel HPn1=new HPanel(W/4+10,H-90,3*W/4-15,85);
- add(HPn1);
- addWindowListener(new WindowAdapter() {
- @Override
- public void windowClosing(WindowEvent e) {
- System.exit(0);
- }
- });
- BPn1.B1.addActionListener(new Button1Pressed(BPn1,PPn1));
- BPn1.B2.addActionListener(new Button2Pressed());
- BPn1.Cb[3].addItemListener(new cbChanged(BPn1));
- setResizable(false);
- }
- }
- class Bpanel extends Panel{
- public Label[] L;
- public CheckboxGroup CbG;
- public Checkbox[] Cb;
- public Choice Ch;
- public TextField TF;
- 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[3];
- L[0]=new Label("Выбор цвета: ",Label.CENTER);
- L[0].setFont(new Font("Arial",Font.BOLD,12));
- L[0].setBounds(5,5,getWidth()-10,30);
- add(L[0]);
- CbG=new CheckboxGroup();
- Cb = new Checkbox[4];
- Cb[0]=new Checkbox(" Красный",CbG,true);
- Cb[1]=new Checkbox(" Синий",CbG,false);
- Cb[2]=new Checkbox(" Черный",CbG,false);
- Cb[3]=new Checkbox(" Сетка",true);
- for (int i = 0; i < 4; i++) {
- Cb[i].setBounds(5,30+i*25,getWidth()-10,30);
- add(Cb[i]);
- }
- Ch=new Choice();
- Ch.add("Зеленый");
- Ch.add("Желтый");
- Ch.add("Серый");
- Ch.setBounds(20,140,getWidth()-25,30);
- add(Ch);
- L[1]=new Label("Интервал по X:",Label.CENTER);
- L[1].setBounds(5,220,getWidth()-10,30);
- L[1].setFont(new Font("Arial",Font.BOLD,12));
- add(L[1]);
- L[2]=new Label("От x=0 до x=:",Label.CENTER);
- L[2].setBounds(5,250,70,20);
- add(L[2]);
- TF = new TextField("10");
- TF.setBounds(75,250,45,20);
- add(TF);
- B1=new Button("Нарисовать");
- B2=new Button("Закрыть");
- 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=0,Ymin=0,Ymax=1.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;
- }
- status=P.Cb[3].getState();
- switch (P.Ch.getSelectedIndex()){
- case 0:
- gclr=Color.GREEN;
- break;
- case 1:
- gclr=Color.YELLOW;
- break;
- default:
- gclr=Color.GRAY;
- }
- String name = P.CbG.getSelectedCheckbox().getLabel();
- if(name.equalsIgnoreCase(" Красный")) clr=Color.RED;
- else if(name.equalsIgnoreCase(" Синий")) clr=Color.BLUE;
- else clr=Color.BLACK;
- }
- private double f(double x){
- return (1+Math.sin(x))/(1+Math.abs(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(Xmin+k*(Xmax-Xmin)/nums),s-17,s+h-1-k*h/nums);
- }
- if(status){
- Fig.setColor(gclr);
- 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(clr);
- 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=5;
- 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 HPanel extends Panel{
- public Label L;
- public TextArea TA;
- HPanel(int x,int y,int W,int H){
- setBackground(Color.LIGHT_GRAY);
- setBounds(x,y,W,H);
- setLayout(null);
- L=new Label("Справка",Label.CENTER);
- L.setBounds(0,0,W,20);
- add(L);
- TA = new TextArea(" График функции ");
- TA.setFont(new Font("Serif",Font.PLAIN,15));
- TA.setBounds(5,20,W-10,60);
- TA.setEditable(false);
- add(TA);
- }
- }
- 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 MyFrame{
- public static void main(String[] args) {
- PlotFrame frame = new PlotFrame(400,500);
- frame.setVisible(true);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement