點(diǎn)擊查看:全國(guó)計(jì)算機(jī)二級(jí)考試《Java》入門(mén)教程匯總
鼠標(biāo)事件的事件源往往與容器相關(guān),當(dāng)鼠標(biāo)進(jìn)入容器、離開(kāi)容器,或者在容器中單擊鼠標(biāo)、拖動(dòng)鼠標(biāo)時(shí)都會(huì)發(fā)生鼠標(biāo)事件。java語(yǔ)言為處理鼠標(biāo)事件提供兩個(gè)接口:MouseListener,MouseMotionListener接口。
MouseListener接口
MouseListener接口能處理5種鼠標(biāo)事件:按下鼠標(biāo),釋放鼠標(biāo),點(diǎn)擊鼠標(biāo)、鼠標(biāo)進(jìn)入、鼠標(biāo)退出。相應(yīng)的方法有:
(1) getX():鼠標(biāo)的X坐標(biāo)
(2) getY():鼠標(biāo)的Y坐標(biāo)
(3) getModifiers():獲取鼠標(biāo)的左鍵或右鍵。
(4) getClickCount():鼠標(biāo)被點(diǎn)擊的次數(shù)。
(5) getSource():獲取發(fā)生鼠標(biāo)的事件源。
(6) addMouseListener(監(jiān)視器):加放監(jiān)視器。
(7) removeMouseListener(監(jiān)視器):移去監(jiān)視器。
要實(shí)現(xiàn)的MouseListener接口的方法有:
(1) mousePressed(MouseEvent e);
(2) mouseReleased(MouseEvent e);
(3) mouseEntered(MouseEvent e);
(4) mouseExited(MouseEvent e);
(5) mouseClicked(MouseEvent e);
【例 11-18】小應(yīng)用程序設(shè)置了一個(gè)文本區(qū),用于記錄一系列鼠標(biāo)事件。當(dāng)鼠標(biāo)進(jìn)入小應(yīng)用程序窗口時(shí),文本區(qū)顯示“鼠標(biāo)進(jìn)來(lái)”;當(dāng)鼠標(biāo)離開(kāi) 窗口時(shí),文本區(qū)顯示“鼠標(biāo)走開(kāi)”;當(dāng)鼠標(biāo)被按下時(shí),文本區(qū)顯示“鼠標(biāo)按下”,當(dāng)鼠標(biāo)被雙擊時(shí),文本區(qū)顯示“鼠標(biāo)雙擊”;并顯示鼠標(biāo)的坐標(biāo)。程序還顯示一個(gè)紅色的圓,當(dāng)點(diǎn)擊鼠標(biāo)時(shí),圓的半徑會(huì)不斷地變大(查看源文件)。
任何組件上都可以發(fā)生鼠標(biāo)事件:鼠標(biāo)進(jìn)入、鼠標(biāo)退出、按下鼠標(biāo)等。例如,在上述程序中添加一個(gè)按鈕,并給按鈕對(duì)象添加鼠標(biāo)監(jiān)視器,將上述程序中的init()方法修改成如下形式,即能示意按鈕上的所有鼠標(biāo)事件。
JButton button;
public void init(){
button = new JButton(“按鈕也能發(fā)生鼠標(biāo)事件”);
r = 10;
text = new JTextArea(15,20);
add(button);
add(text);
button.addMouseListener(this);
}
如果程序希望進(jìn)一步知道按下或點(diǎn)擊的是鼠標(biāo)左鍵或右鍵,鼠標(biāo)的左鍵或右鍵可用InputEvent類(lèi)中的常量BUTTON1_MASK和BUTTON3_MASK來(lái)判定。例如,以下表達(dá)式判斷是否按下或點(diǎn)擊了鼠標(biāo)右鍵:
e.getModifiers()==InputEvent. BUTTON3_MASK
MouseMotionListener接口
MouseMotionListener接口處理拖動(dòng)鼠標(biāo)和鼠標(biāo)移動(dòng)兩種事件。
注冊(cè)監(jiān)視器的方法是:
addMouseMotionListener(監(jiān)視器)
要實(shí)現(xiàn)的的接口方法有兩個(gè):
(1) mouseDragged(MouseEvent e)
(2) mouseMoved(MouseEvent e)
【例 11-19】一個(gè)滾動(dòng)條與顯示窗口同步變化的應(yīng)用程序。窗口有一個(gè)方塊,用鼠標(biāo)拖運(yùn)方塊,或用鼠標(biāo)點(diǎn)擊窗口,方塊改變顯示位置,相應(yīng)水平和垂直滾動(dòng)條的滑塊也會(huì)改變它們?cè)跐L動(dòng)條中的位置。反之,移動(dòng)滾動(dòng)條的滑塊,方塊在窗口中的顯示位置也會(huì)改變(查看源文件)。
上述例子中,如果只要求通過(guò)滑動(dòng)滑塊,改變內(nèi)容的顯示位置,可以簡(jiǎn)單地使用滾動(dòng)面板JScrollPane。如果是這樣,關(guān)于滾動(dòng)條的創(chuàng)建和控制都可以免去,直接由JScrollPane內(nèi)部實(shí)現(xiàn)。參見(jiàn)以下修改后的MyWindow的定義:
class MyWindow extends JFrame{
public MyWindow(String s){
super(s);
Container con = this.getContentPane();
con.setLayout(new BorderLayout());
this.setLocaltion(100,100);
MyListener listener = new MyListener();
listener.setPreferredSize(new Dimension(700,700));
JScrollPane scrolledCanvas = new JScrollPane(listener);
this.add(scrolledCanvas,BorderLayout.CENTER);
this.setVisible(true);
this.pack();
}
public Dimension getPreferredSize(){
return new Dimension(400,400);
}
}
鼠標(biāo)指針形狀也能由程序控制 ,setCursor()方法能設(shè)置鼠標(biāo)指針形狀。例如,代碼setCursor(Cursor.getPredefinedCursor(cursor.WAIT_CURSOR))。
微信搜索"考試吧"了解更多考試資訊、下載備考資料
相關(guān)推薦:
【考試吧整理】計(jì)算機(jī)等級(jí)考試各科目歷年真題全國(guó)計(jì)算機(jī)等級(jí)考試證書(shū)體系(2018版)
全國(guó)計(jì)算機(jī)等級(jí)考試課程、教材列表(2018版)
全國(guó)計(jì)算機(jī)等級(jí)證書(shū)分幾級(jí)?哪個(gè)級(jí)別最高?
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |