15.2-全棧Java筆記:ActionEvent事件類型可以實(shí)現(xiàn)哪些功能?

ActionEvent事件

ActionEvent可能是使用得最多的事件類型翔脱,其對(duì)應(yīng)的監(jiān)聽器是ActionListener接口琢歇,該監(jiān)聽器接口的實(shí)現(xiàn)類必須重寫actionPerformed方法焚碌,當(dāng)事件發(fā)生時(shí)就會(huì)調(diào)用該方法。

這個(gè)方法的原型是:public void actionPerformed(ActionEvent ?e); 這個(gè)actionPerformed方法就是當(dāng)事件發(fā)生時(shí)霸妹,由系統(tǒng)自動(dòng)調(diào)用的方法十电,因此我們希望事件發(fā)生時(shí)需要做的業(yè)務(wù)邏輯可以寫在這個(gè)方法中,但是這個(gè)方法我們只需要重寫即可,不需要調(diào)用鹃骂,因?yàn)樗且粋€(gè)回調(diào)方法台盯。

我們?cè)?4.4章節(jié)中使用Swing的常用控件實(shí)現(xiàn)了一個(gè)用戶登錄的靜態(tài)界面,但是沒用功能(點(diǎn)擊按鈕沒有產(chǎn)生任何事件)畏线,現(xiàn)在我們可以使用事件模型一起完成如下功能:

1. 按下退出按鈕時(shí)静盅,應(yīng)用程序結(jié)束。

2. 按下登錄按鈕時(shí)寝殴,如果用戶姓名是zhangsan蒿叠,并且密碼是sxt,那么登錄界面消失蚣常,出現(xiàn)一個(gè)對(duì)話框市咽,顯示“歡迎您:zhangsan”,否則顯示一個(gè)對(duì)話框抵蚊,顯示“用戶姓名或密碼錯(cuò)誤”施绎。

具體代碼如示例1 ~ 示例4所示。

【示例1】ActionEvent事件—窗口類

packagecn.sxt.actionevent.views;

importjavax.swing.JButton;

importjavax.swing.JFrame;

importjavax.swing.JLabel;

importjavax.swing.JPanel;

importjavax.swing.JPasswordField;

importjavax.swing.JTextField;

importcn.sxt.actionevent.listeners.LoginFrame_btnLogin_ActionListener;

importcn.sxt.actionevent.listeners.LoginFrame_btnQuit_ActionListener;

/**

*登陸窗口

*@author高淇

*/

publicclassLoginFrameextendsJFrame {

privateJPanelpnlMain;

//標(biāo)簽控件

privateJLabellblTitle;

privateJLabellblUserName;

privateJLabellblUserPwd;

//輸入用戶名的文本框控件

privateJTextFieldtxtUserName;

//輸入密碼的密碼框控件

privateJPasswordFieldpwdUserPwd;

//登錄和退出按鈕控件

privateJButtonbtnLogin;

privateJButtonbtnQuit;

publicLoginFrame() {

//實(shí)例化各種容器和控件

pnlMain=newJPanel(null);

lblTitle=newJLabel("用戶登錄");

lblUserName=newJLabel("用戶姓名:");

lblUserPwd=newJLabel("用戶密碼:");

txtUserName=newJTextField();

pwdUserPwd=newJPasswordField();

btnLogin=newJButton("登錄");

btnQuit=newJButton("退出");

init();

}

//對(duì)文本框?qū)ο蠛兔艽a框?qū)ο筇砑觛et方法

publicJTextField? getTxtUserName() {

returntxtUserName;

}

publicJPasswordField? getPwdUserPwd() {

returnpwdUserPwd;

}

//該方法對(duì)窗口做初始化

privatevoidinit() {

//設(shè)置窗口屬性

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setTitle("登錄窗口");

this.setSize(300, 220);

this.setResizable(false);

/*

*設(shè)置各個(gè)控件的位置和坐標(biāo)

* setBounds方法的前兩個(gè)參數(shù)為控件的左上角坐標(biāo)贞绳,后兩個(gè)參數(shù)為控件的寬和高

*/

lblTitle.setBounds(100, 10, 100, 30);

lblUserName.setBounds(20, 60, 75, 25);

lblUserPwd.setBounds(20, 100, 75, 25);

txtUserName.setBounds(100, 60, 120, 25);

pwdUserPwd.setBounds(100, 100, 120, 25);

btnLogin.setBounds(50, 140, 75, 25);

btnQuit.setBounds(150, 140, 75, 25);

/*

*在退出按鈕上添加按鈕按下監(jiān)聽對(duì)象,

*并在實(shí)例化監(jiān)聽對(duì)象中傳入當(dāng)前窗口對(duì)象本身

*/

btnQuit.addActionListener(newLoginFrame_btnQuit_ActionListener(this));

/*

*在登錄按鈕上添加按鈕按下監(jiān)聽對(duì)象,

*并在實(shí)例化監(jiān)聽對(duì)象中傳入當(dāng)前窗口對(duì)象本身

*/

btnLogin.addActionListener(newLoginFrame_btnLogin_ActionListener(this));

//將所有控件壓在容器上

pnlMain.add(lblTitle);

pnlMain.add(lblUserName);

pnlMain.add(lblUserPwd);

pnlMain.add(txtUserName);

pnlMain.add(btnLogin);

pnlMain.add(btnQuit);

this.add(pnlMain);

this.setVisible(true);

}

}

【示例2】ActionEvent事件—退出按鈕監(jiān)聽類

packagecn.sxt.actionevent.listeners;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importcn.sxt.actionevent.views.LoginFrame;

/**

*退出功能監(jiān)聽類

*@author高淇

*/

publicclassLoginFrame_btnQuit_ActionListenerimplementsActionListener {

privateLoginFramelf;

publicLoginFrame_btnQuit_ActionListener(LoginFramelf) {

this.lf=lf;

}

@Override

publicvoidactionPerformed(ActionEvente) {

//關(guān)閉登錄窗口(dispose方法為關(guān)閉窗口并釋放資源)

lf.dispose();

}

}

【示例3】ActionEvent事件—登錄按鈕監(jiān)聽類

packagecn.sxt.actionevent.listeners;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjavax.swing.JOptionPane;

importcn.sxt.actionevent.views.LoginFrame;

/**

*登陸功能監(jiān)聽類

*@author高淇

*/

publicclassLoginFrame_btnLogin_ActionListenerimplementsActionListener {

privateLoginFramelf;

publicLoginFrame_btnLogin_ActionListener(LoginFramelf) {

this.lf=lf;

}

@Override

publicvoidactionPerformed(ActionEvente) {

//獲得用戶姓名的文本框?qū)ο蟮奈谋緝?nèi)容

StringuserName=lf.getTxtUserName().getText().trim();

//獲得用戶密碼的密碼框?qū)ο蟮奈谋緝?nèi)容

StringuserPwd=newString(lf.getPwdUserPwd().getPassword()).trim();

if(userName.equals("zhangsan") &&userPwd.equals("sxt")) {

/*

*彈出對(duì)話框谷醉,第1個(gè)參數(shù)為窗口,所以可以傳null冈闭,

*第2個(gè)參數(shù)為提示文本俱尼,第3個(gè)參數(shù)為標(biāo)題信息,第4個(gè)參數(shù)為樣式

*/

JOptionPane.showMessageDialog(null,"歡迎您:"+userName,"提示",

JOptionPane.INFORMATION_MESSAGE);

return;

}
JOptionPane.showMessageDialog(null,"用戶姓名或密碼錯(cuò)誤","錯(cuò)誤",

JOptionPane.ERROR_MESSAGE);

}
}

【示例4】ActionEvent事件—測(cè)試類

packagecn.sxt.actionevent.test;

importcn.sxt.actionevent.views.LoginFrame;

publicclassTest {

//創(chuàng)建登錄窗口

publicstaticvoidmain(String[ ]args) {

newLoginFrame();

}

}

執(zhí)行結(jié)果如圖所示:


圖ActionEvent事件運(yùn)行效果圖




「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記拒秘。筆者江湖人稱 Mr. G号显,10年Java研發(fā)經(jīng)驗(yàn),曾在神州數(shù)碼躺酒、航天院某所研發(fā)中心從事軟件設(shè)計(jì)及研發(fā)工作押蚤,從小白逐漸做到工程師、高級(jí)工程師羹应、架構(gòu)師揽碘。精通Java平臺(tái)軟件開發(fā),精通JAVAEE园匹,熟悉各種流行開發(fā)框架雳刺。

筆記包含從淺入深的六大部分:

A-Java入門階段

B-數(shù)據(jù)庫從入門到精通

C-手刃移動(dòng)前端和Web前端

D-J2EE從了解到實(shí)戰(zhàn)

E-Java高級(jí)框架精解

F-Linux和Hadoop

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市裸违,隨后出現(xiàn)的幾起案子掖桦,更是在濱河造成了極大的恐慌,老刑警劉巖供汛,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件枪汪,死亡現(xiàn)場(chǎng)離奇詭異涌穆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)雀久,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門宿稀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赖捌,你說我怎么就攤上這事祝沸。” “怎么了越庇?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵罩锐,是天一觀的道長。 經(jīng)常有香客問我悦荒,道長唯欣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任搬味,我火速辦了婚禮境氢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘碰纬。我一直安慰自己萍聊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布悦析。 她就那樣靜靜地躺著寿桨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪强戴。 梳的紋絲不亂的頭發(fā)上亭螟,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音骑歹,去河邊找鬼预烙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛道媚,可吹牛的內(nèi)容都是我干的扁掸。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼最域,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼谴分!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起镀脂,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤牺蹄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后薄翅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钞馁,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡虑省,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了僧凰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡熟丸,死狀恐怖训措,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情光羞,我是刑警寧澤绩鸣,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站纱兑,受9級(jí)特大地震影響呀闻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜潜慎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一捡多、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧铐炫,春花似錦垒手、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鳖悠,卻和暖如春榜掌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背乘综。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國打工憎账, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瘾带。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓鼠哥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親看政。 傳聞我的和親對(duì)象是個(gè)殘疾皇子朴恳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容