java多线程使用案例 典型多线程小实例:球的运动
典型多线程小实例:球的运动
/** *一个典型的多线程小实例 球的运动 *几乎每一处都有注释 只要一点时间就能看懂 *适合初学者学习交流 */ 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= y= ; int ball_size= ;
public frame() { super( ball );
//创建画板 jp_HuaBan=new JPanel(); jp_HuaBan setBounds( ); jp_HuaBan setBackground(Color white);
//创建球的予览框 jp_YuLan=new JPanel(); jp_YuLan setBounds( ); jp_YuLan setBackground(Color white);
//创建一个文本框作为状态栏 JTextField jt_status=new JTextField( 请选择球的颜色 大小然后点击按钮 ); jt_status setBounds( ); jt_status setEditable(false);
//创建红 绿 蓝三个标签 JLabel jl_red=new JLabel( 红 ); jl_red setBounds( ); JLabel jl_green=new JLabel( 绿 ); jl_green setBounds( ); JLabel jl_blue=new JLabel( 蓝 ); jl_blue setBounds( ); JLabel jl_size=new JLabel( 大小 ); jl_size setBounds( );
//创建红 绿 蓝三个滑块 js_red=new JSlider(SwingConstants HORIZONTAL ); js_red setBounds( ); //填充滑块 js_red putClientProperty( JSlider isFilled Boolean TRUE); //绘制勾号标记 js_red setPaintTicks(true); //主要的勾号标记大小 js_red setMajorTickSpacing( ); //次要的勾号标记大小 js_red setMinorTickSpacing( ); //显示主要刻度的数字标记 js_red setPaintLabels(true); //添加监听者 js_red addChangeListener(this);
js_green=new JSlider(SwingConstants HORIZONTAL ); js_green setBounds( ); js_green putClientProperty( JSlider isFilled Boolean TRUE); js_green setPaintTicks(true); js_green setMajorTickSpacing( ); js_green setMinorTickSpacing( ); js_green setPaintLabels(true); js_green addChangeListener(this); js_blue=new JSlider(SwingConstants HORIZONTAL ); js_blue setBounds( ); js_blue putClientProperty( JSlider isFilled Boolean TRUE); js_blue setPaintTicks(true); js_blue setMajorTickSpacing( ); js_blue setMinorTickSpacing( ); js_blue setPaintLabels(true); js_blue addChangeListener(this); //创建球的大小的滑块 js_size=new JSlider(SwingConstants HORIZONTAL ); js_size setBounds( ); js_size putClientProperty( JSlider isFilled Boolean TRUE); js_size setPaintTicks(true); js_size setMajorTickSpacing( ); js_size setMinorTickSpacing( ); js_size setPaintLabels(true); js_size addChangeListener(this);

//创建按钮 JButton jb=new JButton( ball ); jb setBounds( ); 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( ); this setResizable(false); this setVisible(true); this addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System exit( ); } }); }
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= js_size getValue()/ ; y= js_size getValue()/ ; 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= y= ; //计算画球时X轴 Y轴的最大坐标 int HuaBan_x= ball_size; int HuaBan_y= ball_size; //球移动的增量 int x_increase= y_increase= ; 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<= || x>=HuaBan_x) x_increase= x_increase; if(y<= || y>=HuaBan_y) y_increase= y_increase; try { //休眠一段时间 Thread sleep( ); } 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= ball_size y= ; int HuaBan_x=x; int HuaBan_y= ball_size; int x_increase= y_increase= ; while(true) {
lishixinzhi/Article/program/Java/gj/201311/27730