新聞中心
java事件適配器
這樣
為企業(yè)提供網(wǎng)站制作、成都網(wǎng)站設計、網(wǎng)站優(yōu)化、成都全網(wǎng)營銷、競價托管、品牌運營等營銷獲客服務。成都創(chuàng)新互聯(lián)擁有網(wǎng)絡營銷運營團隊,以豐富的互聯(lián)網(wǎng)營銷經(jīng)驗助力企業(yè)精準獲客,真正落地解決中小企業(yè)營銷獲客難題,做到“讓獲客更簡單”。自創(chuàng)立至今,成功用技術實力解決了企業(yè)“網(wǎng)站建設、網(wǎng)絡品牌塑造、網(wǎng)絡營銷”三大難題,同時降低了營銷成本,提高了有效客戶轉化率,獲得了眾多企業(yè)客戶的高度認可!
import java.awt.*;
import java.awt.event.*;
public class TestFrame {
public static void main(String[] args) {
Frame f=new Frame("test");
MyWindowListener m=new MyWindowListener();
f.add(new Button("Button"));
f.setSize(300, 400);
f.addWindowListener(m);
f.setVisible(true);
}
}
class MyWindowListener extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
e.getWindow().setVisible(false);
((Window)e.getComponent()).dispose();
System.exit(0);
}
public MyWindowListener(){}
}
JAVA中,事件類,事件監(jiān)聽器接口,事件適配器類,*Event事件
1.首先 組件 發(fā)生動作,它產(chǎn)生事件,事件被傳遞到相應的監(jiān)聽器(或者適配器)里,調用程序員編寫的相應處理方法,從而響應事件!
例: 當組件(比如 Button)被點擊時就會產(chǎn)生ActionEvent事件,事件被傳遞給一個 ActionListener 對象,再由ActionListener 定義的方法來響應處理事件!
另:適配器類是對監(jiān)聽器接口的簡化,因為有的監(jiān)聽器接口
(如:WindowListener,MouseListener),它有一些方法可能是我們不用的,但為了迎合接口重寫規(guī)則還必須寫! 所以產(chǎn)生了適配器類,它也是抽象類,但類中方法都不是抽象的,所以我們可以挑我們用的方法進行重寫!這樣我門也能通過繼承適配器類來實現(xiàn)監(jiān)聽器的功能,而且不用的方法不用寫!節(jié)省時間嘛~
2.不是包含關系,是繼承關系!(具體請查閱API文擋)
3.不是!(EventListener是在java.util包中!事件類Event在java.awt包中)
4.ActionEvent(包括所有Event)不是人為繼承實現(xiàn)的!是系統(tǒng)自動調用的!
所有的Event(事件)都有自己的實現(xiàn)接口,事件發(fā)生的時候,系統(tǒng)會自動尋找到相應的接口實現(xiàn)類(已經(jīng)添加事件監(jiān)聽的情況下),從而調用相應實現(xiàn)方法響應事件!
5.ActionEvent 是一個具體的事件,它是系統(tǒng)調用的!
ActionListener 是ActionEvent 的監(jiān)聽接口,用于實現(xiàn)類繼承和方法重寫!
具體繼承情況如下:
java.lang.Object
java.util.EventObject
java.awt.AWTEvent
java.awt.event.ActionEvent
求解答以下的java源代碼,詳細點,說明這個程序的設計思路,還有比如運用了多線程的話運用了多線程的什么
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.Timer;
public class PinBall
{
private final int TABLE_WIDTH = 300;//桌面寬度
private final int TABLE_HEIGHT = 400;//桌面高度
private final int RACKET_Y = 340;//球拍的垂直位置
private final int RACKET_HEIGHT = 20;//球拍高度
private final int RACKET_WIDTH = 60;//球拍寬度
private final int BALL_SIZE = 16;//球的大小
private Frame f = new Frame("彈球游戲");//實例化一個窗口
Random rand = new Random();//實例化一個隨機數(shù)生成器
private int ySpeed = 10;//小球的縱向運動數(shù)度、
private double xyRate = rand.nextDouble() - 0.5;//返回一個-0.5到0.5之間的比率用控制小球運動方向
private int xSpeed = (int)(ySpeed*xyRate*2);//這個橫向速度在-10到10之間,產(chǎn)生左右擺動運動效果
private int ballX = rand.nextInt(200)+20;//小球開始的橫坐標位置,200表示產(chǎn)生0到100之間的隨機數(shù)
private int ballY = rand.nextInt(10)+20;//小球開始的縱坐標位置
private int racketX = rand.nextInt(200);//球拍開始時的橫坐標位置
private MyCanvas tableArea = new MyCanvas();//實力化一個畫布工具,集成Canvas類
private String shape = "";//保存需要繪制圖形的字符串屬性
Timer timer;//聲明一個時間變量
private boolean isLose = false;//表示游戲是否結束
public void init()
{
tableArea.setPreferredSize(new Dimension(TABLE_WIDTH,TABLE_HEIGHT));//定義畫布大小
f.add(tableArea);//添加畫布到窗口
KeyAdapter keyProcessor = new KeyAdapter()//實例化一個鍵盤監(jiān)聽事件適配器
{
public void keyPressed(KeyEvent ke)//重寫適配器里面的按下某鍵盤方法
{
if(ke.getKeyCode()==KeyEvent.VK_LEFT)//按下鍵盤左鍵時
{
if(racketX 0)//球拍左邊框不能出畫布的左邊框
racketX -=10;//按一左鍵次向左移動10個像素
}
if(ke.getKeyCode()==KeyEvent.VK_RIGHT)//按下鍵盤右鍵時
{
if(racketX TABLE_WIDTH - RACKET_WIDTH)//球拍右邊框不能出畫布的右邊框
racketX +=10;//按一次右鍵移動向右移動10個像素
}
}
};
f.addKeyListener(keyProcessor);//給窗口添加鍵盤監(jiān)聽器
tableArea.addKeyListener(keyProcessor);//給畫布添加鍵盤監(jiān)聽器
ActionListener taskPerformer = new ActionListener()//這里是實例化了一個監(jiān)聽接口,這個接口里面只有一個方法
{
public void actionPerformed(ActionEvent evt)//重寫這個接口里面的方法,判斷小球的位置
{
if(ballX=0 || ballX=TABLE_WIDTH-BALL_SIZE)//保證小球橫向上在畫布之內(nèi)運動
{
xSpeed = -xSpeed;//觸發(fā)反方向運動
}
if(ballY=RACKET_Y-BALL_SIZE(ballXracketX||ballXracketX+RACKET_WIDTH))//出了球拍的可擊打范圍
{
timer.stop();//停止對監(jiān)聽器的觸發(fā)
isLose=true;//將標志isLose變量置為true
tableArea.repaint();//調用畫布的重繪方法
}
else if(ballY=0||(ballY=RACKET_Y-BALL_SIZEballYracketXballX=racketX+RACKET_WIDTH))//小球在球拍之內(nèi),而其到達球拍的高度
{
ySpeed=-ySpeed;//上下方向改變,小球反彈
}
ballY+=ySpeed;//小球的坐標在縱向上增加
ballX+=xSpeed;//小球的坐標在橫向上的增加
tableArea.repaint();//調用畫布的重繪方法3
}
};
timer = new Timer(100,taskPerformer);//每隔0.1秒運行一次監(jiān)聽器
timer.start();//計時器開始運行
f.addWindowListener(new MyListener());//關閉窗口事件
f.pack();//設置窗口最佳大小
f.setVisible(true);//顯示窗口
}
class MyListener extends WindowAdapter//關閉窗口的類
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
public static void main(String[] args)//程序入口
{
new PinBall().init();//調用PinBall類里面的init()方法
}
class MyCanvas extends Canvas//建一個集成Canvas類的類
{
public void paint(Graphics g)//重寫父類的繪圖方法
{
if(isLose)//如果isLose為真,則在畫布里打印“游戲已結束”
{
g.setColor(new Color(255,0,0));//當前顏色
g.setFont(new Font("黑體",Font.BOLD,30));//字體名稱,樣式,大小
g.drawString("游戲已結束!",50,200);//按坐標繪制文字圖形
}
else//負責
{
g.setColor(new Color(240,240,80));//當前顏色
g.fillOval(ballX,ballY,BALL_SIZE,BALL_SIZE);//填充顏色,根據(jù)坐標和長寬填充圓形
g.setColor(new Color(80,80,200));//當前顏色
g.fillRect(racketX,RACKET_Y,RACKET_WIDTH,RACKET_HEIGHT);//填充顏色,根據(jù)坐標和長寬填充矩形
}
}
}
}
網(wǎng)頁題目:事件適配器java代碼 事件適配器java代碼是什么
本文路徑:http://biofuelwatch.net/article/ddgdsic.html