導入Java . awt . event . *;
導入Java . awt . geom . *;
導入Java . util . *;
導入javax . swing . *;
/**
*多線程,小球演示。打開Windows任務管理器查看線程變化。可以搜索,運行()方法/。開始()
*
*杜:程序技巧經驗:所謂生成壹個小球就是新的對象,它的屬性攜帶了球的坐標、顏色、容器等參數。
*
*壹個類,其屬性用作參數容器,其功能由方法完成....
* */
//運行該類
公共類BouncePress {
//
公共靜態void main(String[] args) {
JFrame frame = new BouncePressFrame();//生成窗口。執行施工。-商業邏輯。
frame . setdefaultcloseoperation(JFrame。EXIT _ ON _ CLOSE);//類似於
//窗口
//監聽器
frame . show();
}
}
類BouncePressFrame擴展JFrame {
私人棒球場畫布畫布;
public BouncePressFrame() {
setSize(600,500);//窗口大小
setTitle(“彈跳球”);
container content pane = getContentPane();// Swing的窗口不能直接放東西,只能放在上面的ContentPane上。
canvas = new ball press canvas();//生成新面板。-帆布
contentPane.add(canvas,BorderLayout。中心);//將此面板添加到窗口中央。
JPanel button panel = new JPanel();//生成新面板。-按鈕面板
//調用此類方法addButton。
添加按鈕(buttonPanel,"開始",//生成按鈕"開始"--添加面板按鈕面板。
new action listener(){//|-& gt;將按鈕綁定到操作監聽器。
球容器對象執行的公共void操作(actioneveventevt) {/|的。
addBall(線程。NORM_PRIORITY - 4,color . black);//處理事件時,執行- addBall()方法。-& gt;生成小球(參數對象)->;添加到列表->開始畫球。
}
});//按壹次,addBall()壹次->生成壹個新球->添加到列表->開始繪制這個新球。
//-& gt;BallPressThread-> Ball(參數對象)的Run()。move ()->每次畫的時候,先動,再判斷,再畫。
//-& gt;BallPressCanvas類的Canvas對象。paint()->;自動調整BallPressCanvas類的paintComponent(Graphics)。
// g)方法。
//-& gt;在這個方法中,所有的球,第I個球,從列表中循環取出,-->;調整棒球場。
// .draw()方法->;通過調整Graphics2D方法繪制壹個球。-使用顏色/
addButton(buttonPanel," Express ",new ActionListener() {
public void action performed(ActionEvent evt){
addBall(線程。NORM_PRIORITY + 2,color . red);
}
});
addButton(buttonPanel," Close ",new ActionListener() {
public void action performed(ActionEvent evt){
system . exit(0);
}
});
contentPane.add(buttonPanel,BorderLayout。南);
}
public void addButton(容器c,字符串標題,ActionListener偵聽器){
JButton button = new JButton(標題);//生成壹個按鈕。
c.add(按鈕);//添加到容器中。
button.addActionListener(監聽器);//按鈕來綁定操作偵聽器。
}
/* *主要經營方式。*/
public void addBall(int priority,Color color) {
//生成壹個小球(參數對象)
棒球場b =新棒球場(帆布,彩色);//生成壹個BallPress對象,進位並初始化。
//畫壹個球形的球,必選參數:容器組件,必選顏色-黑色/紅色。
//球被添加到列表中。
canvas . add(b);//向面板畫布的ArrayList添加壹個BallPress對象。
ballpress thread thread = new ballpress thread(b);//生成壹個BallPressThread對象,壹個畫球的線程類。傳入BallPress對象(它攜帶繪制球所需的信息。
//容器,顏色參數)。
thread.setPriority(優先級);
thread . start();//調用run(),球開始移動
//拉球線程開始。-& gt;BallPressThread的run()->;球(參數對象)。move ()->先動,再畫。canvas . paint-& gt;棒球場畫布類
}
}
//畫球的線程類。
class BallPressThread擴展線程{
私人棒球場b;
公共滾珠壓力線(滾珠壓力桿){
b = aBall
}
//抽球開始。
公共無效運行(){
嘗試{
for(int I = 1;我& lt= 1000;I++) {//畫1000次。
b . move();//每次畫的時候,先動,再判斷,再畫。
睡眠(5);//所以比Bounce.java的球移動的慢。
}
} catch (InterruptedException e) {
}
}
}
// swing panel類。
//Function 1)這個類的Panel對象。paint()方法->;自動繪制面板,並自動調整paintComponent(圖形
// g)方法,->重寫此方法以繪制面板(及其組件)。
//Role 2)這個類對象的屬性ArrayList balls——balls(參數對象)的容器。
class BallPressCanvas擴展JPanel {
私有數組列表balls = new ArrayList();
public void add(BallPress b) {
balls . add(b);//在數組列表中添加壹個球。當您按下按鈕並添加多個球時,它們都保存在此列表中。
}
//覆蓋javax.swing.JComponent的paintComponent()方法
// paint()方法自動調用此方法。
public void paint component(Graphics g){
super . paint component(g);
graphics 2d G2 =(graphics 2d)g;
for(int I = 0;我& ltballs . size();I++) {//循環
ball press b =(ball press)balls . get(I);//從列表中取出第I個球,
b . draw(G2);//畫這個球。
}
}
}
/**
*畫壹個球。
*
*在畫布上畫壹個彩色的小球。
*
*屬性,可以用來攜帶畫球所需的參數。
*
*
*
* @作者杜康安
*
*/
班級棒球場{
私有組件畫布;
私彩色彩;
private int x = 0;
private int y = 0;
private int dx = 2;
private int dy = 2;
//構造初始化容器顏色參數。
公共棒球場(成分c,顏色)
canvas = c;
color = aColor
}
//設置位置,畫球。
公共無效繪制(Graphics2D g2) {
g2.setColor(顏色);
g2.fill(新Ellipse2D。Double(x,y,15,15));// ellipse:橢圓
}
//移動球。
//每次畫的時候,先動,再判斷,再畫。
//每次執行這個方法,畫出球的起點坐標(x,y),每次加+2,即向右下對角移動。
公共void移動(){
x+= dx;//x = x+dx;畫出球的起點坐標(x,y),每個坐標+2,即向右下對角移動。
y+= dy;//y = y+dy;
if(x & lt;0) {//球已經到了左邊界。答應,從左邊界開始畫。
x = 0;
dx =-dx;//球橫坐標的變化值反過來。開始反向運動。
}
if(x+15 & gt;= canvas.getWidth()) {//球的右邊已經到了畫板的右邊。
x = canvas . getwidth()-15;
dx =-dx;//開始反向運動。
}
if(y & lt;0) {//保證,從頂框抽取。
y = 0;
dy =-dy;
}
if(y+15 & gt;= canvas.getHeight()) {//球已經到了畫板的頂部。
y = canvas . get height()-15;
dy =-dy;
}
canvas . paint(canvas . get graphics());//繪制面板對象畫布-(以及其上的所有組件)
///.paint()方法,自動調用。
}
}
/*導入Java . awt . *;
導入Java . awt . event . *;
導入Java . awt . geom . *;
導入Java . util . *;
導入javax . swing . *;
*//**
*單線程,小球demo無法搜索,run()方法/。開始()
*//*
公共類反彈{
公共靜態void main(String[] args) {
JFrame frame = new bounce frame();
frame . setdefaultcloseoperation(JFrame。EXIT _ ON _ CLOSE);//類似於
//窗口
//監聽器
frame . show();
}
}
不懂再問。。。