日期:2014-05-20  浏览次数:20707 次

这个代码为什么显示不出来…想得我头都大了
Java code

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.lang.Math;
public class TestSin extends JFrame{
 private DisplayPanel dp;
  
public void TestSin(){
 setLayout(new BorderLayout());
 dp=new DisplayPanel(this);
 getContentPane().add(dp,"Center");
 setLocation(200,200);
 pack();
 setVisible(true);
 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    
} 
 public static void main(String []args){
 new TestSin();
   }

 class DisplayPanel extends JPanel implements Runnable,MouseListener{
  private TestSin ts;
  Thread th;
  double c=0.0;
  double a=100.0;
  boolean stopIt=false;
  public DisplayPanel(TestSin tsi){
      ts=tsi;
    setBackground(Color.pink);

 // setCursor(Cursor.WAIT_CURSOR); 这里为什么不对啊??
    setPreferredSize(new Dimension(300,700));
    addMouseListener(this);
    th=new Thread(this);
    th.start();
    }
   public void paint(Graphics g){
       Graphics2D g1=(Graphics2D)g;
       ts.setTitle("C ="+c);
       g1.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
       //也可以用super.paint();
       g1.clearRect(0,0,getSize().width,getSize().height);
       g1.setColor(Color.blue);
       for(int i=0;i<getSize().width;i++){
       g1.drawLine(i,(int)(Math.sin(i/a+c)*a+getSize().height/2),
                   i+1,(int)(Math.sin(i+1/a+c)*a+getSize().height/2) );
       }
       }
    public void run(){
     while(!stopIt){
     c+=0.1;
     repaint();     
     if(c>=2*Math.PI*getSize().width) 
     {c=0.0;}
     }
     try{
      th.sleep(1000);
     }
     catch(InterruptedException ex)
     {ex.printStackTrace();}    
    }
    public  void mouseClicked(MouseEvent e){}
    
    public  void mousePressed(MouseEvent e){}
    
    public  void mouseReleased(MouseEvent e){stopIt=!stopIt;}
    
    public  void mouseEntered(MouseEvent e){}
    
    public  void mouseExited(MouseEvent e){}   
   }
   }


编译通过,就是结果显示不出来
本意是想输出一段动态的SIN曲线

------解决方案--------------------
Format了一下:
Java code
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.lang.Math;

public class TestSin extends JFrame {

    private DisplayPanel dp;

    public TestSin() {
        setLayout(new BorderLayout());
        dp = new DisplayPanel(this);
        getContentPane().add(dp, "Center");
        setLocation(200, 200);
        pack();
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        new TestSin();
    }

    class DisplayPanel extends JPanel implements Runnable, MouseListener {

        private TestSin ts;

        Thread th;

        double c = 0.0;

        double a = 100.0;

        boolean stopIt = false;

        public DisplayPanel(TestSin tsi) {
            ts = tsi;
            setBackground(Color.pink);

            setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
            setPreferredSize(new Dimension(300, 700));
            addMouseListener(this);
            th = new Thread(this);
            th.start();
        }

        public void paint(Graphics g) {
            Graphics2D g1 = (Graphics2D) g;
            ts.setTitle("C =" + c);
            g1.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                    RenderingHints.VALUE_ANTIALIAS_ON);
            // 也可以用super.paint();
            g1.clearRect(0, 0, getSize().width, getSize().height);
            g1.setColor(Color.blue);
            for (int i = 0; i < getSize().width; i++) {
                g1.drawLine(i, (int) (Math.sin(i / a + c) * a + getSize().height / 2),
                        i + 1, (int) (Math.sin(i + 1 / a + c) * a + getSize().height / 2));
            }
        }

        public void run() {
            while (!stopIt) {
                c += 0.1;
                repaint();
                if (c >= 2 * Math.PI * getSize().width) {
                    c = 0.0;
                }
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        }

        public void mouseClicked(MouseEvent e) {
        }

        public void mousePressed(MouseEvent e) {
        }

        public void mouseReleased(MouseEvent e) {
            stopIt = !stopIt;
        }

        public void mouseEntered(MouseEvent e) {
        }

        public void mouseExited(MouseEvent e) {
        }
    }
}