要求:动态绘制圆周
上网查的结果是在主程序中用paint画出来了
但我想用注释掉的线程画圆周中的线,不知道怎么实现。为什么自己建的线程无法再包含一个paint
[code=Java][/code]import java.awt.BorderLayout;
public class CircleDrawing extends JFrame {
private static JPanel contentPane;
/* private class Draw implements Runnable{
public void run(){
for(int i=0;i<360;i++){
try{
Thread.sleep(10);
}catch(InterruptedException e){
e.printStackTrace();
}
int startX=(int)(225+100*Math.sin(Math.PI/180*i));
int startY=(int)(130-100*Math.cos(Math.PI/180*i));
int endX=(int)(225+100*Math.sin(Math.PI/180*(i+1)));
int endY=(int)(130-100*Math.cos(Math.PI/180*(i+1)));
Graphics g=null;
g.drawLine(startX, startY, endX, endY);
}
}
}
*/
public void paint(final Graphics g)
{
for(int i=0;i<360;i++){
try{
Thread.sleep(10);
}catch(InterruptedException e){
e.printStackTrace();
}
int startX=(int)(225+100*Math.sin(Math.PI/180*i));
int startY=(int)(130-100*Math.cos(Math.PI/180*i));
int endX=(int)(225+100*Math.sin(Math.PI/180*(i+1)));
int endY=(int)(130-100*Math.cos(Math.PI/180*(i+1)));
g.drawLine(startX, startY, endX, endY);
}
}
/**
* Launch the application.
*/
public static void main(String[] args) {
final CircleDrawing cd=new CircleDrawing();
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
cd.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
// CircleDrawing.Draw d=cd.new Draw();
// Thread thread1=new Thread(d);
// thread1.start();
}
/**
* Create the frame.
*/
public CircleDrawing() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
}
}
------解决方案--------------------
画最好还是在paint方法中完成。想实现动态效果,可设定类变量,paint方法中使用类变量的值就行作业。线程中重新设定类变量的值,然后使用repaint方法就会重新调用paint方法。