分享
 
 
 

典型多线程小实例:球的运动

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

/**

*一个典型的多线程小实例:球的运动

*几乎每一处都有注释,只要一点时间就能看懂

*适合初学者学习交流

*这是我学习java线程时做的一个小程序,请大家指教

*电子邮箱tomtailer@163.com

*/

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.event.*;

public class ball

{

public static void main(String args[])

{

new frame();

}

}

class frame extends JFrame implements ActionListener,ChangeListener

{

JPanel jp_HuaBan;

JPanel jp_YuLan;

JSlider js_red;

JSlider js_green;

JSlider js_blue;

JSlider js_size;

int x=45,y=45;

int ball_size=30;

public frame()

{

super("ball");

//创建画板

jp_HuaBan=new JPanel();

jp_HuaBan.setBounds(20,0,450,200);

jp_HuaBan.setBackground(Color.white);

//创建球的予览框

jp_YuLan=new JPanel();

jp_YuLan.setBounds(350,220,120,120);

jp_YuLan.setBackground(Color.white);

//创建一个文本框作为状态栏

JTextField jt_status=new JTextField("请选择球的颜色、大小然后点击按钮");

jt_status.setBounds(1,404,492,20);

jt_status.setEditable(false);

//创建红、绿、蓝三个标签

JLabel jl_red=new JLabel("红");

jl_red.setBounds(20,215,30,20);

JLabel jl_green=new JLabel("绿");

jl_green.setBounds(20,260,30,20);

JLabel jl_blue=new JLabel("蓝");

jl_blue.setBounds(20,305,30,20);

JLabel jl_size=new JLabel("大小");

jl_size.setBounds(20,350,30,20);

//创建红、绿、蓝三个滑块

js_red=new JSlider(SwingConstants.HORIZONTAL,0,255,127);

js_red.setBounds(50,210,250,45);

//填充滑块

js_red.putClientProperty("JSlider.isFilled",Boolean.TRUE);

//绘制勾号标记

js_red.setPaintTicks(true);

//主要的勾号标记大小

js_red.setMajorTickSpacing(50);

//次要的勾号标记大小

js_red.setMinorTickSpacing(25);

//显示主要刻度的数字标记

js_red.setPaintLabels(true);

//添加监听者

js_red.addChangeListener(this);

js_green=new JSlider(SwingConstants.HORIZONTAL,0,255,127);

js_green.setBounds(50,255,250,45);

js_green.putClientProperty("JSlider.isFilled",Boolean.TRUE);

js_green.setPaintTicks(true);

js_green.setMajorTickSpacing(50);

js_green.setMinorTickSpacing(25);

js_green.setPaintLabels(true);

js_green.addChangeListener(this);

js_blue=new JSlider(SwingConstants.HORIZONTAL,0,255,127);

js_blue.setBounds(50,300,250,45);

js_blue.putClientProperty("JSlider.isFilled",Boolean.TRUE);

js_blue.setPaintTicks(true);

js_blue.setMajorTickSpacing(50);

js_blue.setMinorTickSpacing(25);

js_blue.setPaintLabels(true);

js_blue.addChangeListener(this);

//创建球的大小的滑块

js_size=new JSlider(SwingConstants.HORIZONTAL,10,50,30);

js_size.setBounds(50,345,250,45);

js_size.putClientProperty("JSlider.isFilled",Boolean.TRUE);

js_size.setPaintTicks(true);

js_size.setMajorTickSpacing(10);

js_size.setMinorTickSpacing(5);

js_size.setPaintLabels(true);

js_size.addChangeListener(this);

//创建按钮

JButton jb=new JButton("ball");

jb.setBounds(350,360,120,30);

jb.addActionListener(this);

//将所有对象添加到窗体

Container c=this.getContentPane();

c.setLayout(null);

c.add(jp_HuaBan);

c.add(jp_YuLan);

c.add(jl_red);

c.add(jl_green);

c.add(jl_blue);

c.add(jl_size);

c.add(js_red);

c.add(js_green);

c.add(js_blue);

c.add(js_size);

c.add(jb);

c.add(jt_status);

//设置窗体的位置和大小

this.setBounds(100,50,500,450);

this.setResizable(false);

this.setVisible(true);

this.addWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

});

}

public void actionPerformed(ActionEvent e)

{

Color ball_color=new Color(js_red.getValue(),

js_green.getValue(),js_blue.getValue());

rball r=new rball(jp_HuaBan,js_size.getValue(),ball_color);

r.start();

lball l=new lball(jp_HuaBan,js_size.getValue(),ball_color);

l.start();

}

public void stateChanged(ChangeEvent e)

{

//获得jp_YuLan的画笔并在jp_YuLan的中心画个圆

Graphics g=jp_YuLan.getGraphics();

g.setColor(Color.white);

g.fillOval(x,y,ball_size,ball_size);

x=60-js_size.getValue()/2;

y=60-js_size.getValue()/2;

ball_size=js_size.getValue();

g.setColor(new Color(js_red.getValue(),

js_green.getValue(),js_blue.getValue()));

g.fillOval(x,y,ball_size,ball_size);

g.dispose();

}

}

class lball extends Thread

{

//从窗口左面出现的球

JPanel jp_HuaBan;

int ball_size;

Color ball_color;

public lball(JPanel j,int i,Color c)

{

//获得画板的句柄

jp_HuaBan=j;

//获得球的大小

ball_size=i;

//获得球的颜色

ball_color=c;

}

public void run()

{

Graphics g=jp_HuaBan.getGraphics();

int x=0,y=0;

//计算画球时X轴,Y轴的最大坐标

int HuaBan_x=450-ball_size;

int HuaBan_y=200-ball_size;

//球移动的增量

int x_increase=5,y_increase=5;

while(true)

{

//将上一次画的球擦掉

g.setColor(Color.white);

g.fillOval(x,y,ball_size,ball_size);

//画球

g.setColor(ball_color);

x=x+x_increase;

y=y+y_increase;

g.fillOval(x,y,ball_size,ball_size);

//判断球是否到达了边界,若到达了则转向

if(x<=0 || x>=HuaBan_x) x_increase=-x_increase;

if(y<=0 || y>=HuaBan_y) y_increase=-y_increase;

try

{

//休眠一段时间

Thread.sleep(60);

}

catch(Exception e){}

}

}

}

class rball extends Thread

{

//从窗口左面出现的球

JPanel jp_HuaBan;

int ball_size;

Color ball_color;

public rball(JPanel j,int i,Color c)

{

jp_HuaBan=j;

ball_size=i;

ball_color=c;

}

public void run()

{

Graphics g=jp_HuaBan.getGraphics();

int x=450-ball_size,y=0;

int HuaBan_x=x;

int HuaBan_y=200-ball_size;

int x_increase=-5,y_increase=5;

while(true)

{

g.setColor(Color.white);

g.fillOval(x,y,ball_size,ball_size);

g.setColor(ball_color);

x=x+x_increase;

y=y+y_increase;

g.fillOval(x,y,ball_size,ball_size);

if(x<=0 || x>=HuaBan_x) x_increase=-x_increase;

if(y<=0 || y>=HuaBan_y) y_increase=-y_increase;

try

{

Thread.sleep(30);

}

catch(Exception e){}

}

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有