| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1635 人关注过本帖
标题:模拟单摆运动的小程序,为什么不动咧??
取消只看楼主 加入收藏
cll19820814
Rank: 2
等 级:新手上路
威 望:3
帖 子:328
专家分:0
注 册:2005-11-30
收藏
 问题点数:0 回复次数:6 
模拟单摆运动的小程序,为什么不动咧??

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class DanBai
{ public static void main(String[] args)
{ JFrame f = new DFrame("DanBai");
f.show();
}
}

class DFrame extends JFrame
{ public DFrame(String title)
{ super(title);
setSize(300, 200);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent evt)
{ System.exit(0); }
});
getContentPane().add(new DPanel());
}
}

class DPanel extends JPanel
implements TimerListener
{ public DPanel()
{ Timer t = new Timer(1000);
t.addTimerListener(this);
}

public void timeElapsed(TimerEvent evt)
{ Graphics g = getGraphics();
int x1, y1, x2, y2 = 0, r = 160, t = 5;
double b = 30, a = this.getWidth();
x2 = (int)(a / 2);
x1 = (int)(x2 - Math.sin(b * Math.PI / 180) * r);
y1 = (int)(Math.cos(b * Math.PI / 180) * r);
g.drawLine(x1, y1, x2, y2);
g.fillOval(x1 - t, y1 - t, 2 * t, 2 * t);
if(b >= 30) b--;
else if (b <= 30) b++;
g.dispose();
}
}

interface TimerListener extends EventListener
{ public void timeElapsed(TimerEvent evt);
}

class Timer extends Component implements Runnable
{ public Timer(int i)
{ interval = i;
Thread t = new Thread(this);
t.start();
evtq = Toolkit.getDefaultToolkit().getSystemEventQueue();
enableEvents(0);
}

public void addTimerListener(TimerListener l)
{ listener = l;
}

public void run()
{ while (true)
{ try { Thread.sleep(interval); }
catch(InterruptedException e) {}
TimerEvent te = new TimerEvent(this);
evtq.postEvent(te);
}
}

public void processEvent(AWTEvent evt)
{ if (evt instanceof TimerEvent)
{ if (listener != null)
listener.timeElapsed((TimerEvent)evt);
}
else super.processEvent(evt);
}
private int interval;
private TimerListener listener;
private static EventQueue evtq;
}

class TimerEvent extends AWTEvent
{ public TimerEvent(Timer t) { super(t, TIMER_EVENT); }
public static final int TIMER_EVENT
= AWTEvent.RESERVED_ID_MAX + 5555;
}
程序后半段是抄书的,哪位可以帮我解释一下吗??

[此贴子已经被作者于2005-12-30 16:17:55编辑过]

搜索更多相关主题的帖子: 单摆 模拟 运动 
2005-12-30 16:16
cll19820814
Rank: 2
等 级:新手上路
威 望:3
帖 子:328
专家分:0
注 册:2005-11-30
收藏
得分:0 
麻烦看看我的哪里不对啊 ~~~~~求助啊~~~

懵懵懂懂,看千遍而不会;设身处地,试一下就成功!
2005-12-30 20:17
cll19820814
Rank: 2
等 级:新手上路
威 望:3
帖 子:328
专家分:0
注 册:2005-11-30
收藏
得分:0 
但是我加了
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent evt)
{ System.exit(0); }这句啊?
我正好要问这句和 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);这句有什么不同啊?
是不是上面那句关掉整个程序,而 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);这句只关掉一个Frame啊??

懵懵懂懂,看千遍而不会;设身处地,试一下就成功!
2005-12-31 10:40
cll19820814
Rank: 2
等 级:新手上路
威 望:3
帖 子:328
专家分:0
注 册:2005-11-30
收藏
得分:0 
我大概知道哪错了,首先 this.getWidth()不是double 而是 int型的;
还有那个判断,一次之后就没用了,b一直停留在 29~

懵懵懂懂,看千遍而不会;设身处地,试一下就成功!
2005-12-31 10:42
cll19820814
Rank: 2
等 级:新手上路
威 望:3
帖 子:328
专家分:0
注 册:2005-11-30
收藏
得分:0 
还是老大哥照顾我呀 哈哈哈
再帮我看看后面的Timer是怎么做的嘛~

懵懵懂懂,看千遍而不会;设身处地,试一下就成功!
2005-12-31 10:44
cll19820814
Rank: 2
等 级:新手上路
威 望:3
帖 子:328
专家分:0
注 册:2005-11-30
收藏
得分:0 
o  ~~~~对哦~~ 完全了解了 给我解释下那个TimerListener都怎么做的吗??

懵懵懂懂,看千遍而不会;设身处地,试一下就成功!
2005-12-31 11:02
cll19820814
Rank: 2
等 级:新手上路
威 望:3
帖 子:328
专家分:0
注 册:2005-11-30
收藏
得分:0 
..............
切~~~这么一句话就打发我了~~~

懵懵懂懂,看千遍而不会;设身处地,试一下就成功!
2005-12-31 11:34
快速回复:模拟单摆运动的小程序,为什么不动咧??
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013312 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved