左边是绘图面板,右边有一个滑杆用来控制角度!使一个点围绕另一个点画直线!怎么就有问题呢?!本人使初学者,这个问题可能比较弱,还望大家不要笑话:)
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import javax.swing.event.*;class myPane
    extends JPanel {
  int x1 = 300;
  int y1 = 300;
  int x2;
  int y2;
  int Angle;  public myPane() {
    x2 = (int) (x1 + 200 * Math.cos(this.getAngle()));
    y2 = (int) (y1 + 200 * Math.sin(this.getAngle()));
  }  public void setAngle(int a) {
    Angle = a;
  }
  public int getAngle() {
    return Angle;
  }  public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawLine(x1, y1, x2, y2);
  }}public class Applet1
    extends JApplet {
  private boolean isStandalone = false;
  myPane p = new myPane();
  JPanel control = new JPanel();
  JSlider slider = new JSlider(0, 360, 30);
  //Get a parameter value
  public String getParameter(String key, String def) {
    return isStandalone ? System.getProperty(key, def) :
        (getParameter(key) != null ? getParameter(key) : def);
  }  //Construct the applet
  public Applet1() {
  }  //Initialize the applet
  public void init() {
    try {
      jbInit();
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }  //Component initialization
  private void jbInit() throws Exception {
    this.setSize(new Dimension(800, 600));    Container contentPane = getContentPane();
    contentPane.setLayout(new BorderLayout());
    contentPane.add(p, BorderLayout.CENTER);
    contentPane.add(control, BorderLayout.EAST);
    control.add(slider);
    slider.setMajorTickSpacing(90);
    slider.setMinorTickSpacing(30);
    slider.setPaintLabels(true);
    slider.setPaintLabels(true);
    slider.addChangeListener(new ChangeListener() {
      public void stateChanged(ChangeEvent e) {
        p.setAngle(slider.getValue());
        p.repaint();
      }
    }
    );
  }  //Get Applet information
  public String getAppletInfo() {
    return "Applet Information";
  }  //Get parameter info
  public String[][] getParameterInfo() {
    return null;
  }  //static initializer for setting look & feel
  static {
    try {
      //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
      //UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
    }
    catch (Exception e) {
    }
  }
}

解决方案 »

  1.   

    1、x2,y2的计算应放在paintComponent方法中,而不是在构造方法中。
    2、Math.sin和Math.cos的参数都是弧度而不是角度。因此你必须把slider上的数值换算成弧度。
      

  2.   

    3、myPane的构造方法中,指定自己的Size,否则不能显示。
      

  3.   

    //修改后代码
    import java.awt.*;
    import java.awt.event.*;
    import java.applet.*;
    import javax.swing.*;
    import javax.swing.event.*;class myPane
        extends JPanel {
      int x1 = 300;
      int y1 = 300;
      int x2;
      int y2;
      int Angle;  public myPane() {
        setPreferredSize(new Dimension(800,600));                              //此处设Size
      }  public void setAngle(int a) {
        Angle = a;
      }
      public int getAngle() {
        return Angle;
      }  public void paintComponent(Graphics g) {
        super.paintComponent(g);
        x2 = (int) (x1 + 200 * Math.cos(this.getAngle()*Math.PI/180));            //此处计算
        y2 = (int) (y1 + 200 * Math.sin(this.getAngle()*Math.PI/180));
        g.drawLine(x1, y1, x2, y2);
      }}public class Applet1
        extends JApplet {
      private boolean isStandalone = false;
      myPane p = new myPane();
      JPanel control = new JPanel();
      JSlider slider = new JSlider(0, 360, 30);
      //Get a parameter value
      public String getParameter(String key, String def) {
        return isStandalone ? System.getProperty(key, def) :
            (getParameter(key) != null ? getParameter(key) : def);
      }  //Construct the applet
      public Applet1() {
      }  //Initialize the applet
      public void init() {
        try {
          jbInit();
        }
        catch (Exception e) {
          e.printStackTrace();
        }
      }  //Component initialization
      private void jbInit() throws Exception {
        this.setSize(new Dimension(800, 600));    Container contentPane = getContentPane();
        contentPane.setLayout(new BorderLayout());
        contentPane.add(p, BorderLayout.CENTER);
        contentPane.add(control, BorderLayout.EAST);
        control.add(slider);
        slider.setMajorTickSpacing(90);
        slider.setMinorTickSpacing(30);
        slider.setPaintLabels(true);
        slider.setPaintLabels(true);
        slider.addChangeListener(new ChangeListener() {
          public void stateChanged(ChangeEvent e) {
            p.setAngle(slider.getValue());
            p.repaint();
            System.out.println("changed");
          }
        }
        );
      }  //Get Applet information
      public String getAppletInfo() {
        return "Applet Information";
      }  //Get parameter info
      public String[][] getParameterInfo() {
        return null;
      }  //static initializer for setting look & feel
      static {
        try {
          //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
          //UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
        }
        catch (Exception e) {
        }
      }
    }
      

  4.   

    //测试HTML代码
    <applet code=Applet1.class codebase=. width=1000 height=600></applet>
      

  5.   

    谢谢aico(aico),第一次发贴,就得到了这么详细的指导,多谢了!!