Java swing元件与事件处理.docx
- 文档编号:26652941
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:52
- 大小:1.27MB
Java swing元件与事件处理.docx
《Java swing元件与事件处理.docx》由会员分享,可在线阅读,更多相关《Java swing元件与事件处理.docx(52页珍藏版)》请在冰豆网上搜索。
Javaswing元件与事件处理
Javaswing元件與事件處理
1.視窗應用程式簡介3
2.JFrame類別4
(1).使用swing套件4
(2).範例練習:
exp7_2_1.java4
(3).範例練習:
exp7_2_2.java7
(4).JFrame類別常用的方法8
3.常用的swing元件10
(1).JLabel(標籤)10
(2).範例練習:
exp7_3_1.java11
(3).JTextField(單行文字欄位)13
(4).範例練習:
exp7_3_2.java13
(5).JButton(按鈕)15
(6).範例練習:
exp7_3_3.java15
(7).swing元件常用的方法17
4.事件處理與傾聽者18
(1).範例練習:
exp7_4_1.java20
5.鍵盤事件23
(1).實作KeyListener介面24
(2).範例練習:
exp7_5_1.java24
(3).繼承KeyAdapter類別26
(4).範例練習:
exp7_5_2.java27
6.滑鼠事件29
(1).繼承MouseAdapter類別30
(2).範例練習:
exp7_6_1.java30
(3).繼承MouseMotionAdapter類別32
(4).範例練習:
exp7_6_2.java32
(5).實作MouseListener介面34
(6).範例練習:
exp7_6_3.java34
(7).實作MouseMotionListener介面37
(8).範例練習:
exp7_6_4.java37
7.取消註冊傾聽者40
(1).範例練習:
exp7_7_1.java40
8.計時器44
(1).範例練習:
exp7_8_1.java44
9.實例--翻牌配對遊戲47
(1).如何亂數排出牌組47
(2).範例練習:
exp7_9_1.java47
(3).如何處理翻牌配對50
(4).範例練習:
exp7_9_2.java50
1.
視窗應用程式簡介
前面章節所介紹的程式,輸入與輸出都是在主控制台模式下執行,操作上很麻煩,也受到不少限制。
如果我們想移動滑鼠指標到螢幕特定位置,按一下就可以輸入或執行某動作,或者我們想在螢幕的任意位置同時顯示文字、圖形或輸入文字,也就是在我們最熟悉的視窗與滑鼠環境下作業,這時我們需要的就是撰寫視窗應用程式。
如何在螢幕出現視窗並且顯示各類元件,這方面Java有提供Java.awt和javax.swing兩種套件,本書針對swing套件來做明。
由於swing功能強大,所提供的套件內元件之多,若要全部學會,這對初學者是極大負擔,所以本書將只介紹最新而且最常用的元件,不但絕對實用,並且滿足一般需求。
至於有志鑽研Java程式的人,日後再繼續研究進階的swing元件。
目前的電腦系統大都是使用圖形使用介面,其呈現方式有視窗、瀏覽器。
下面的圖形使用介面是以視窗方式呈現的簡單應用程式。
在上面的圖形使用介面中,除視窗(JFrame)外,還有兩個按鈕(JButton)、兩個標籤(JLabel)、兩個文字欄位(JTextField),這些都是swing元件。
本章先介紹上圖出現的元件,至於其它元件,如:
選擇鈕(JRadioButton)、核取方塊(JCheckBox)、捲軸(JScrollPane)、下拉式清單(JComboBox)、清單(JList)…等,將於其它章節再介紹。
2.
JFrame類別
(1).使用swing套件
製作視窗應用程式,首先要開啟一個獨立視窗,這時我們要定義一個視窗類別,而這個視窗類別的資料成員、方法成員可直接繼承swing套件所提供的JFrame類別。
在撰寫程式碼時,須用import來宣告所使用的swing套件及套件內的所有類別,並且在自訂的視窗類別須用extends來繼承JFrame類別。
(2).範例練習:
exp7_2_1.java
Step1用import來匯入javax.swing套件並宣告套件內的
所有類別。
Step2自訂視窗類別CFrame繼承(extends)JFrame類別。
1.行01:
自訂視窗類別名稱為CFrame,繼承swing套件內的JFrame類別。
2.行02~08:
為自訂類別CFrame的建構子,它屬於CFrame類別的方法成員。
當CFrame類別在主程式被使用來宣告建立視窗物件時,CFrame類別建構子立即被呼叫執行。
3.行03:
建立一個新視窗,並設定視窗的標題列文字。
省略本行,所建立的視窗沒有標題列文字。
標題文字可用setTitle(Stringtitle)敘述來取代,如:
setTitle("J7_2_1應用程式");
「super("J7_2_1應用程式");」敘述一定要放在繼承JFrame類別的類別建構子第一行,但「setTitle("J7_2_1應用程式");」敘述沒有限制。
4.行04~05:
分別設定視窗在螢幕上顯示的位置與大小。
本兩行可以改成一行,setBounds(100,120,400,200);。
其中
視窗的左上角座標(100,120)是以螢幕左上角為原點,水平座標向右100個像素、垂直座標向下120像素,寬度400像素包含左右兩邊界的框線各4像素,高度200像素包含欄題列30像素及下邊界框線4像素。
5.行06:
設定視窗可以顯示在螢幕上。
6.行07:
設定當關閉視窗時一併結束應用程式。
若省略本行,則關閉視窗時,應用程式仍未結束。
此時,要在主控制台模式下,按Ctrl+C,強迫結束應用程式。
Step3類別編輯主程式類別:
1.行03:
宣告CFrame類別的視窗物件frame1,該行會執行CFrame類別的建構子,而顯示視窗。
(3).
範例練習:
exp7_2_2.java
1.行03:
保留上範例所宣告建立的視窗物件frame1。
2.行04:
宣告CFrame類別的視窗物件frame2時,此時亦會執行CFrame類別的建構子,而顯示視窗。
但建構子內的設定已被第05~06行更改。
3.行05:
設定視窗物件frame2的標題列文字。
4.行06:
設定視窗物件frame2的位置及大小。
(4).
JFrame類別常用的方法
在前面的兩個範例中,我們用到了幾個JFrame類別常用的方法,如:
setVisible()、setLocation()、setSize()、setBounds()、setTitle()…等。
現在我們將JFrame類別常用的方法列舉出來,如下:
1.JFrame類別的建構子
①JFrame()
②JFrame(Stringtitle)
用來建立一個新視窗物件,參數title為視窗標題列文字。
當
繼承的類別呼叫使用JFrame類別時,要用super(Stringtitle)
敘述,而且要放在建構子內的第一行。
2.voidsetTitle(Stringtitle)
設定視窗標題列的文字,可以放在類別任何一行,比
super(Stringtitle)敘述有彈性。
3.voidsetSize(intwidth,intheight)
設定視窗的大小,即指定寬度與高度,單位:
像素(pixed)。
4.voidsetLocation(intx,inty)
設定視窗的左上角(x,y)座標,單位:
像素(pixed)。
5.voidsetBounds(intx,inty,intwidth,intheight)
設定視窗的位置與大小。
6.voidsetVisible(booleanb)
設定視窗是否顯示。
當參數b為true時,表示視窗可顯示;
若參數b為false時,表示視窗隱藏。
7.voidsetDefaultCloseOperation(intop)
當視窗最上面標題列右側的關閉鈕
被點按時,系統會採取的
動作。
參數op共有四種設定:
①JFrame.DO_NOTHING_ON_CLOSE不採取任何動作。
②JFrame.HIDE_ON_CLOSE隱藏視窗。
(預設值)
③JFrame.DISPOSE_ON_CLOSE移除視窗。
④JFrame.EXIT_ON_CLOSE移除視窗並結束應用程式。
8.voidadd(Componentcomp)
comp是指按鈕(JButton)、標籤(JLabel)、文字欄位
(JTextField)等swing元件。
當這些元件要放入視窗時,
要使用add()方法。
9.voidsetLayout(LayoutManagermanager)
當視窗內要放入swing元件時,需指定版面配置方式。
Java提供了6種
配置方式(請參閱第10章)。
如果不使用任何的版面配置方式,在
呼叫本方法時,參數要設為null,即setLayout(null);。
3.
常用的swing元件
初學者最常用的swing元件為JLabel(標籤),JTextField(文字欄位)與JButton(按鈕),其中標籤與按鈕均可顯示文字或圖片(或兩者同時)。
本節將以此為基礎,介紹三種元件的建構子及常用的方法。
(1).JLabel(標籤)
標籤在圖形使用介面中,常被用來提示操作訊息或做為某項動作的標題文字。
標籤物件的建立要使用swing套件的JLabel類別來宣告,而且要使用JFrame的add()方法,才能將標籤物件放入視窗物件中。
當用JLabel類別來宣告建立標籤物件時,同樣會執行JLabel類別的建構子。
我們先介紹在JLabel類別的建構子,至於JLabel類別常用的方法將與另外兩種元件的方法一起介紹。
JLabel類別的建構子有下面幾個:
①JLabel():
建立標籤物件,標籤上沒有顯示文字,也沒有圖片。
②JLabel(Stringtext):
建立的標籤物件,並顯示text文字字串。
③JLabel(ImageIconicon):
建立的標籤物件,並顯示圖片物件。
④JLabel(Stringtext,intalign):
參數align是標籤文字對齊的方式,對齊方式有
JLable.LEFT、JLable.RIGHT、JLable.CENTER。
⑤JLabel(Stringtext,ImageIconicon,intalign):
建立有文字、圖片的標籤物件,圖片會緊接在文字的前面,連同文字一起設定對齊方式。
(2).
範例練習:
exp7_3_1.java
1.行19:
在主程式中,建立CFrame類別的視窗物件frame,會執行CFrame類別的建構子,即執行第03~15行。
2.行04:
建立第一個標籤物件lbl1,並設定顯示文字
「1坪=3.3平方公尺」。
3.行05:
設定標籤物件lbl1放入視窗物件內的位置與大小。
其位置的參考點是視窗內部的左上角座標為(0,0)。
4.行06:
將標籤物件lbl1納入視窗物件frame1內。
5.行07:
建立第二個標籤物件lbl2,並設定顯示文字「輸入坪數:
」。
6.行11:
在建立的frame1視窗物件中,設定不使用任何的版面配置方式。
(3).
JTextField(單行文字欄位)
文字欄位可以顯示訊息,可以讓使用者透過鍵盤做資料輸入或修改的動作。
單行文字欄位物件的建立要使用swing套件的JTextField類別來宣告,一樣要使用JFrame的add()方法,才能放入視窗物件中。
swing套件提供了三種文字欄位,分別是JTextField類別的單行文字欄位、JTextArea類別的多行文字欄位、JPasswordField類別的密碼文字欄位。
本章先只介紹單行文字欄位的JTextField類別,該類別的建構子如下:
①JTextField():
建立空白的單行文字欄位物件。
②JTextField(Stringtext):
建立並顯示text文字字串的單行文字欄位物件。
(4).範例練習:
exp7_3_2.java
1.行04:
建立第一個文字欄位物件txtInput,並顯示文字"0"。
2.行07:
建立第二個文字欄位物件txtArea,沒有顯示文字。
3.行09:
設定文字欄位物件txtArea不能編輯,即不能由鍵盤輸入資料。
(5).
JButton(按鈕)
按鈕是圖形使用介面最常用的元件,用來確認所要執行的動作。
建立按鈕物件要使用swing套件的JButton類別來宣告。
JButton類別的建構子如下:
①JButton():
建立按鈕物件,按鈕上沒有顯示文字,也沒有圖片。
②JButton(Stringtext):
建立的按鈕物件,並顯示text文字字串。
③JButton(ImageIconicon):
建立的按鈕物件,並顯示圖片物件。
④JButton(Stringtext,ImageIconicon):
建立的按鈕物件,顯示text文字字串,也顯示圖片物件。
(6).範例練習:
exp7_3_3.java
1.行04:
建立第一個按鈕物件btnOK,並顯示文字"確定"。
2.行07:
建立第二個按鈕物件btnCls,並顯示文字"清除"。
3.為了方便辨認由各種類別產生的物件,在物件名稱前面加字首。
(7).
swing元件常用的方法
下面列出一些元件常用的方法,不只適用於JLabel、JTextField、JButton等元件,swing套件內許多其他元件也都可以使用,只是有些方法不適用特定元件,請讀者查閱文件說明或自己測試是否可用。
1.voidsetText(Stringtext)/StringgetText()
設定元件內的顯示文字。
/傳回元件內的文字字串。
2.voidsetBounds(intx,inty,intw,inth)
設定元件的左上角座標位置與大小,其座標位置參考原點在視窗
內部的左上角,單位:
像素(pixed)。
3.voidsetLocation(intx,inty)/intgetX()/intgetY()
設定元件的左上角(x,y)座標。
/傳回元件的x座標。
/傳回元件
的y座標。
4.voidsetSize(intw,inth)/intgetHeight()/intgetWidth()
設定元件的大小(寬度,高度)。
/傳回元件的高度。
/傳回元件
的寬度。
5.voidsetVisible(booleanb)/booleanisVisible()
設定元件是否顯示。
當參數b為true時,表示視窗可顯示;
若參數b為false時,表示視窗隱藏。
/判斷元件是否顯示,
若顯示傳回true;否則傳回false。
6.voidsetEnabled(Booleanb)/booleanisEnabled()
設定元件是否有作用可使用。
/判斷元件是否有作用可使用。
7.voidsetIcon(ImageIconicon)/ImageIcongetIcon()
設定元件內的顯示圖形物件。
/傳回元件內的圖形物件。
4.
事件處理與傾聽者
在上節的範例中,視窗內放入了按鈕,但程式執行時用滑鼠指標點按該按鈕,卻沒有任何反應。
這樣的問題,在本節會有解決的方法。
視窗作業系統都是採取圖形使用者介面,其程式執行流程是採用事件驅動(EventDriver)方式運作。
例如程式開始執行後,等待著事件的發生,如移動滑鼠到按鈕上點按一下,就可能會執行特定方法,也可能沒有任何反應,這完全可由程式設計者來決定。
Java對於事件處理方式是採用「委派事件模式」,如下圖所示:
Java將產生事件的物件稱為「事件來源」,而接收事件的物件稱為「事件傾聽者」,處理事件的方法稱為「事件處理方法」。
以上節範例為例,如下所示:
由上面過程得知,事件來源有txtInput、btnOK、btnCls三個物件,這三個物件必須分別與事件傾聽者連結在一起(即為來源物件註冊傾聽者),當事件產生時,會將來源物件以傳遞參數的方式交給事件處理方法運作。
事件處理的傾聽者介面ActionListener由java.awt.event套件所提供,使用時要先匯入。
下圖是使用事件傾聽者介面時,其事件傾聽者為JFrame類別的視窗物件,宣告處理事件的類別可以套用的格式:
1.行02:
匯入java.awt.event套件並宣告套件內的所有類別與介面。
2.行03:
宣告CFrame視窗類別,除了繼承JFrame類別外並實作ActionListener傾聽者介面。
3.行05:
為來源物件註冊事件傾聽者this,this在此指Jframe類別的視窗物件。
4.行07:
傳遞來源物件給事件處理方法。
5.如要移除傾聽者,其敘述為:
物件.removeActionListener(this);
(1).
範例練習:
exp7_4_1.java
1.行04~09:
將會出現在視窗內的swing元件,統一在此處宣告定義。
在此處宣告的用處是,在CFrame類別中的所有方法內,這些swing元件可以被呼叫使用。
2.行15、21、24:
事件來源有txtInput、btnOK、btnCls,分別將與事件傾聽者(this)連結在一起,此處的事件傾聽者(this)為JFrame類別的視窗物件frame。
3.行33~46:
為事件處理方法,當有事件觸發時會呼叫此方法並傳入來源物件。
①若e.getSource()取得的來源物件為txtInput文字欄位時,即在txtInput文字欄位鍵入資料後按
鍵,會執行第35~38行的敘述。
②若e.getSource()取得的來源物件為btnOK按鈕時,即點按鈕,亦會執行第35~38行的敘述。
③若e.getSource()取得的來源物件為btnCls按鈕時,即點按鈕,會執行第40~43行的敘述。
4.行36:
將txtInput文字欄位輸入的字串轉為倍精確數值再乘以3.3。
5.行37:
將數值變數area的值轉換為字串資料並指派給stArea字串變數。
6.行38:
也可以改成
txtArea.setText(“面積為:
”+area+“平方公尺”);
因字串資料與數值資料相加,結果會為字串資料。
7.行44:
若要取消註冊傾聽者,本行以txtInput文字欄位為例。
若去除本行註解,則只要任何一個事件被觸發後,則txtInput文字欄位即失去觸發能力,但btnOK與btnCls按鈕仍有觸發能力。
5.
鍵盤事件
主控制台模式下應用程式主要是使用鍵盤輸入資料,按鍵後,再進行事件處理。
因此事件處理很單純只有一種,不必特別宣告、建立…等。
但是在視窗應用程式中,當使用者用鍵盤輸入資料時,其按下或鬆開按鍵皆會觸動鍵盤事件KeyEvent。
Java在鍵盤的傾聽機制,有兩種方式來處理觸發的事件,分別是「實作KeyListener介面」與「繼承KeyAdapter類別」。
一、KeyListener介面與KeyAdapter類別皆提供了三種鍵盤
處理事件方法:
1.voidkeyPressed(KeyEvente)
當鍵盤按鍵被按下時所觸發的事件。
2.voidkeyReleased(KeyEvente)
當鍵盤已按下的按鍵被放開時所觸發的事件。
3.voidkeyTyped(KeyEvente)
鍵入字元事件,即按下與放開的整個過程。
此時,會產生按鍵
的對應字元,但有些按鍵如或等沒有字元對應。
二、鍵盤事件類別KeyEvent有些常用的方法:
1.intgetkeyCode()
當按下或放開了某一個按鍵,會傳回一個整數型態的鍵盤碼。
而
鍵盤事件類別KeyEvent為一些常用的按鍵定義了常數代碼,
如下:
①0~9數字:
KeyEvent.VK_0~KeyEvent.VK_9。
②A~Z字母:
KeyEvent.VK_A~KeyEvent.VK_Z。
③方向鍵:
KeyEvent.VK_UP、KeyEvent.VK_DOWN、
eyEvent.VK_LEFT、KeyEvent.VK_RIGHT。
④常用鍵:
KeyEvent.VK_SHIFT、KeyEvent.VK_CONTROL、
KeyEvent.VK_ALT、KeyEvent.VK_ENTER…等。
2.chargetkeyChar()
當按下或放開了某一個按鍵,傳回該按鍵的字元。
3.booleanisShiftDown()
當 鍵被按時,傳回值true。
4.booleanisControlDown()
當 鍵被按時,傳回值true。
5.booleanisAltDown()
當 鍵被按時,傳回值true。
(1).
實作KeyListener介面
鍵盤事件傾聽者介面為「KeyListener」,鍵盤事件「事件來源」就是視窗物件,要將視窗物件與鍵盤事件傾聽者連結在一起(註冊傾聽者),要使用addKeyListener(this);敘述。
(2).範例練習:
exp7_5_1.java
1.行04~05:
先建立圖形物件icon1,圖形載自fig_1.jpg圖檔。
再建立標籤物件lblPic,並將icon圖形物件放入標籤內。
此兩行敘述可合併一行,如下:
JLabellblPic=newJLabel(newImageIcon("fig_1.jpg"));
2.行06:
pos_x、pos_y用來存放含有圖形的標籤物件之左上角座標位置。
3.行10:
事件來源與事件傾聽者皆為JFrame類別的視窗物件frame1。
4.行17~33:
為按下鍵盤按鍵所觸發的鍵盤處理事件方法。
5.行18~32:
用e.getKeyCode()取得按下的鍵盤碼。
若取得為方向鍵,則含有圖形的標籤所按方向移動5個像素距離。
6.行34、35:
分別為鍵入字元方法keyTyped()與放開鍵盤的方法keyReleased()。
雖然這兩個方法目前皆沒有處理事件敘述,但仍要列在程式碼中,否則編譯時會出現錯誤。
(3).
繼承KeyAdapter類別
在此這種方式是要另外宣告一個類別繼承KeyAdapter類別,並沒有實作介面,其KeyAdapter類別亦由java.awt.event套件所提供。
下圖是使用繼承KeyAdapter類別事件來處理事件可以套用的格式:
1.行03:
宣告CFrame視窗類別繼承JFrame類別,此處不用實作KeyListener介面。
2.行05:
將來源物
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java swing元件与事件处理 swing 元件 事件 处理