java中接口和事件監(jiān)聽器的深入理解
一:接口
接口在我們生活中無處不在,通過一個(gè)usb接口,我們可以通過u盤傳輸數(shù)據(jù),這個(gè)接口是被定義過的,只有指定的類型能夠使用這個(gè)接口,且通過這個(gè)接口我們傳輸?shù)臄?shù)據(jù)不會(huì)被破壞。
而在java中接口作用類似,定義一個(gè)具有特定特點(diǎn)的接口,在合適的地方引用它,執(zhí)行所對(duì)應(yīng)的功能,這樣能夠?qū)崿F(xiàn)代碼的分離。
下面我們來看一下接口的定義:
關(guān)鍵字:interface
格式:public interface 接口名{ }
接口的屬性:
[public static final]屬性類型 屬性名=屬性值;
static:靜態(tài)的,修飾的內(nèi)容可以通過類名或接口名直接訪問。
final:不可改變的,修飾屬性,則屬性必須初始化。
[ ]里的內(nèi)容可以省略
接口的方法:
[public abstract]方法返回值類型 方法名(參數(shù)類型 參數(shù)名)
abstract:抽象的,修飾方法,則方法不能有方法體。
[ ]中內(nèi)容可以省略
接口的使用:
接口不能創(chuàng)建對(duì)象,需要接口類型的對(duì)象則需要?jiǎng)?chuàng)建一個(gè)類,從而實(shí)現(xiàn)接口
關(guān)鍵字:implements
格式:public class 類名 implements 接口名{ }
**注意:在類中實(shí)現(xiàn)接口時(shí),必須實(shí)現(xiàn)接口中所有的方法**
總結(jié)來說,接口相當(dāng)于制定了一種規(guī)則,只有符合這種規(guī)則了才能進(jìn)入相應(yīng)的接口。
二:事件監(jiān)聽機(jī)制
想象一下,比如在生活中,有一個(gè)攝像頭在監(jiān)視著小明,監(jiān)督他好好學(xué)習(xí),如若發(fā)現(xiàn)他在做別的事情則會(huì)發(fā)出警告提示讓他繼續(xù)學(xué)習(xí),而在java中原理也是一樣。
給事件源組件添加事件監(jiān)聽器,當(dāng)事件源組件上發(fā)生相應(yīng)類型的事件時(shí),則自動(dòng)的調(diào)用監(jiān)聽器中的內(nèi)容。
在電腦上常見的事件類型有三種
鼠標(biāo)事件:用鼠標(biāo)操作組件(鼠標(biāo)的移動(dòng),點(diǎn)擊,松開)
鍵盤事件:用鍵盤操作組件(按動(dòng)鍵盤的按鍵)
動(dòng)作事件:包含鼠標(biāo)點(diǎn)擊按鈕,鍵盤確認(rèn)等。
事件源組件:事件發(fā)生所在的組件,比如在一個(gè)創(chuàng)建好的畫圖板上。
事件監(jiān)聽器:java中為每一種類型的事件都提供了一個(gè)對(duì)應(yīng)類型的事件監(jiān)聽器。
鼠標(biāo)事件監(jiān)聽器:MouseListener
鍵盤事件監(jiān)聽器:KeyListener
動(dòng)作事件監(jiān)聽器:ActionListener
事件監(jiān)聽器的實(shí)現(xiàn):
第一步:確定事件源組件
例如一個(gè)按鈕
第二步:確定事件類型
點(diǎn)擊按鈕則為動(dòng)作事件
第三步:
創(chuàng)建一個(gè)監(jiān)聽器類,實(shí)現(xiàn)對(duì)應(yīng)類型的監(jiān)聽器接口
第四步,在源程序創(chuàng)建監(jiān)聽器對(duì)象,給事件源組件添加事件監(jiān)聽器。
下面我們看一個(gè)登陸界面的實(shí)例
這一段是建立一個(gè)登陸界面
public class UI {
/**
*
*/
public void showIU(){
//建立新界面
JFrame frame=new JFrame();
frame.setSize(600, 900);
//用戶點(diǎn)擊關(guān)閉窗口時(shí)關(guān)閉界面
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//流式布局
FlowLayout layout=new FlowLayout();
frame.setLayout(layout);
//插入賬號(hào)文本框
JTextField register=new JTextField(30);
frame.add(register);
//標(biāo)簽1
JLabel label1=new JLabel("注冊(cè)賬號(hào)");
frame.add(label1);
//密碼
JPasswordField word=new JPasswordField(30);
frame.add(word);
//標(biāo)簽2
JLabel label2= new JLabel("找回密碼");
frame.add(label2);
JCheckBox checkbox=new JCheckBox("記住密碼 ");
frame.add(checkbox);
//設(shè)置復(fù)選框大小
Dimension check =new Dimension(200,35);
checkbox.setPreferredSize(check);
//加入接口類
lisener lisen=new lisener();
//給按鈕添加監(jiān)聽器
butt.addActionListener(lisen);
//讓監(jiān)聽器的文本框和處理的文本框?qū)?yīng)
lisen.nameinput=register;
lisen.passinput=word;
//讓監(jiān)聽器的框與此相同
lisen.jiemian=frame;
word.addActionListener(lisen);
/*
//加入接口
Listener2 lisen1=new Listener2();
//添加監(jiān)聽器
word.addKeyListener(lisen1);
//對(duì)應(yīng)文本框和密碼框
lisen1.name1=register;
lisen1.pass1=word;
lisen1.frame=frame;
*/
//設(shè)置界面可見
frame.setVisible(true);
}
public static void main(String[] args){
UI ui=new UI();
ui.showIU();
}
}
這是我們建立好的登陸界面
我們從中建立了兩個(gè)接口,兩個(gè)動(dòng)作監(jiān)聽器分別監(jiān)聽按鈕是否點(diǎn)擊和是否按鍵盤上的按鍵,從此出現(xiàn)相應(yīng)結(jié)果。
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JDialog;
import javax.swing.JTextField;
import javax.swing.JOptionPane;
import javax.swing.JFrame;
public class lisener implements ActionListener{
JTextField nameinput;
JTextField passinput;
JFrame jiemian;
public void actionPerformed(ActionEvent e){
System.out.println("鼠標(biāo)點(diǎn)擊了");
String name=nameinput.getText();
String password=passinput.getText();
if(name.equals("majunlong")&&password.equals("12345678")){
System.out.println("登陸成功");
jiemian.dispose();
}
else{
System.out.println("登陸失敗");
JOptionPane pane=new JOptionPane();
JOptionPane.showMessageDialog(null, "登陸失敗", "警告", JOptionPane.ERROR_MESSAGE);
}
}
}
這是一個(gè)鼠標(biāo)監(jiān)聽器,當(dāng)按鈕被點(diǎn)擊時(shí)發(fā)出提示框登陸成功或失敗。
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JTextField;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class Listener2 implements KeyListener{
JTextField name1;
JFrame frame;
JTextField pass1;
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
}
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
System.out.println("鼠標(biāo)點(diǎn)擊了");
String name=name1.getText();
String password=pass1.getText();
if(name.equals("majunlong")&&password.equals("12345678")){
System.out.println("登陸成功");
frame.dispose();
}
else{
System.out.println("登陸失敗");
JOptionPane pane=new JOptionPane();
JOptionPane.showMessageDialog(null, "登陸失敗", "警告", JOptionPane.ERROR_MESSAGE);
}
}
}
鍵盤監(jiān)聽器,在輸入密碼之后按下回車,獲得相應(yīng)提示。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)我們的支持。
欄 目:Java
下一篇:Java方法覆蓋重寫實(shí)現(xiàn)原理解析
本文標(biāo)題:java中接口和事件監(jiān)聽器的深入理解
本文地址:http://www.jygsgssxh.com/a1/Java/8822.html
您可能感興趣的文章
- 01-10Java實(shí)現(xiàn)動(dòng)態(tài)模擬時(shí)鐘
- 01-10Springboot中@Value的使用詳解
- 01-10利用Java實(shí)現(xiàn)復(fù)制Excel工作表功能
- 01-10JavaWeb實(shí)現(xiàn)郵件發(fā)送功能
- 01-10java基于poi導(dǎo)出excel透視表代碼實(shí)例
- 01-10Java實(shí)現(xiàn)動(dòng)態(tài)數(shù)字時(shí)鐘
- 01-10基于Java驗(yàn)證jwt token代碼實(shí)例
- 01-10java實(shí)現(xiàn)液晶數(shù)字字體顯示當(dāng)前時(shí)間
- 01-10淺談Java中真的只有值傳遞么
- 01-10Java動(dòng)態(tài)顯示當(dāng)前日期和時(shí)間


閱讀排行
本欄相關(guān)
- 01-10Java實(shí)現(xiàn)動(dòng)態(tài)模擬時(shí)鐘
- 01-10Springboot中@Value的使用詳解
- 01-10JavaWeb實(shí)現(xiàn)郵件發(fā)送功能
- 01-10利用Java實(shí)現(xiàn)復(fù)制Excel工作表功能
- 01-10Java實(shí)現(xiàn)動(dòng)態(tài)數(shù)字時(shí)鐘
- 01-10java基于poi導(dǎo)出excel透視表代碼實(shí)例
- 01-10java實(shí)現(xiàn)液晶數(shù)字字體顯示當(dāng)前時(shí)間
- 01-10基于Java驗(yàn)證jwt token代碼實(shí)例
- 01-10Java動(dòng)態(tài)顯示當(dāng)前日期和時(shí)間
- 01-10淺談Java中真的只有值傳遞么
隨機(jī)閱讀
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10delphi制作wav文件的方法
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 04-02jquery與jsp,用jquery
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文


