⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 一个典型的多线程小实例:球的运动 .txt

📁 一个典型的多线程小实例:球的运动
💻 TXT
字号:

/** 
*一个典型的多线程小实例:球的运动 
*几乎每一处都有注释,只要一点时间就能看懂 
*适合初学者学习交流 
*这是我学习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){} 
} 
} 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -