如何在窗口中画出一个sina函数图像?好像不是用drawLine函数........谢谢赐教!

解决方案 »

  1.   

    去thinking in java上找吧,上面有一个的,在GUI部分
      

  2.   

    还能具体点吗?我没有thinking in java的!
      

  3.   

    //: c13:SineWave.java
    // From 'Thinking in Java, 2nd ed.' by Bruce Eckel
    // www.BruceEckel.com. See copyright notice in CopyRight.txt.
    // Drawing with Swing, using a JSlider.
    // <applet code=SineWave
    //  width=700 height=400></applet>
    import javax.swing.*;
    import javax.swing.event.*;
    import java.awt.*;
    import com.bruceeckel.swing.*;class SineDraw extends JPanel {
      static final int SCALEFACTOR = 200;
      int cycles;
      int points;
      double[] sines;
      int[] pts;
      SineDraw() { setCycles(5); }
      public void setCycles(int newCycles) {
        cycles = newCycles;
        points = SCALEFACTOR * cycles * 2;
        sines = new double[points];
        pts = new int[points];
        for(int i = 0; i < points; i++) {
          double radians = (Math.PI/SCALEFACTOR) * i;
          sines[i] = Math.sin(radians);
        }
        repaint();
      }    
      public void paintComponent(Graphics g) {
        super.paintComponent(g);
        int maxWidth = getWidth();
        double hstep = (double)maxWidth/(double)points;
        int maxHeight = getHeight();
        for(int i = 0; i < points; i++)
          pts[i] = (int)(sines[i] * maxHeight/2 * .95
                         + maxHeight/2);
        g.setColor(Color.red);
        for(int i = 1; i < points; i++) {
          int x1 = (int)((i - 1) * hstep);
          int x2 = (int)(i * hstep);
          int y1 = pts[i-1];
          int y2 = pts[i];
          g.drawLine(x1, y1, x2, y2);
        }
      }
    }public class SineWave extends JApplet {
      SineDraw sines = new SineDraw();
      JSlider cycles = new JSlider(1, 30, 5);
      public void init() {
        Container cp = getContentPane();
        cp.add(sines);
        cycles.addChangeListener(new ChangeListener(){
          public void stateChanged(ChangeEvent e) {
            sines.setCycles(
              ((JSlider)e.getSource()).getValue());
          }
        });
        cp.add(BorderLayout.SOUTH, cycles);
      }
      public static void main(String[] args) {
        Console.run(new SineWave(), 700, 400);
      }
    } ///:~
      

  4.   

    //: com:bruceeckel:swing:Console.java
    // From 'Thinking in Java, 2nd ed.' by Bruce Eckel
    // www.BruceEckel.com. See copyright notice in CopyRight.txt.
    // Tool for running Swing demos from the
    // console, both applets and JFrames.
    package com.bruceeckel.swing;
    import javax.swing.*;
    import java.awt.event.*;public class Console {
      // Create a title string from the class name:
      public static String title(Object o) {
        String t = o.getClass().toString();
        // Remove the word "class":
        if(t.indexOf("class") != -1)
          t = t.substring(6);
        return t;
      }
      public static void setupClosing(JFrame frame) {
        // The JDK 1.2 Solution as an 
        // anonymous inner class:
        frame.addWindowListener(new WindowAdapter() {
          public void windowClosing(WindowEvent e) {
            System.exit(0);
          }
        });
        // The improved solution in JDK 1.3:
        // frame.setDefaultCloseOperation(
        //     EXIT_ON_CLOSE);
      }
      public static void 
      run(JFrame frame, int width, int height) {
        setupClosing(frame);
        frame.setSize(width, height);
        frame.setVisible(true);
      }
      public static void 
      run(JApplet applet, int width, int height) {
        JFrame frame = new JFrame(title(applet));
        setupClosing(frame);
        frame.getContentPane().add(applet);
        frame.setSize(width, height);
        applet.init();
        applet.start();
        frame.setVisible(true);
      }
      public static void 
      run(JPanel panel, int width, int height) {
        JFrame frame = new JFrame(title(panel));
        setupClosing(frame);
        frame.getContentPane().add(panel);
        frame.setSize(width, height);
        frame.setVisible(true);
      }
    } ///:~