1、public void addWindowListener(WindowListener l)添加指定的窗口偵聽器,以從此窗口接收窗口事件。如果 l 為 null,則不拋出任何異常,且不執(zhí)行任何操作。
我們提供的服務有:做網(wǎng)站、網(wǎng)站設計、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、崇明ssl等。為上1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的崇明網(wǎng)站制作公司
這個是API中的方法定義,此方法參數(shù)為接口WindowListener,任何實現(xiàn)該接口的類都可以作為參數(shù)。
2、public abstract class WindowAdapter?implements WindowListener, WindowStateListener, WindowFocusListener
接收窗口事件的抽象適配器類。此類中的方法為空。此類存在的目的是方便創(chuàng)建偵聽器對象。
擴展此類可創(chuàng)建 WindowEvent 偵聽器并為所需事件重寫該方法。(如果要實現(xiàn)
WindowListener 接口,則必須定義該接口內(nèi)的所有方法。此抽象類將所有方法都定義為
null,所以只需針對關心的事件定義方法。)
使用擴展的類可以創(chuàng)建偵聽器對象,然后使用窗口的 addWindowListener
方法向該窗口注冊偵聽器。當通過打開、關閉、激活或停用、圖標化或取消圖標化而改變了窗口狀態(tài)時,將調(diào)用該偵聽器對象中的相關方法,并將
WindowEvent 傳遞給該方法。
3、如果我想在代碼中一次性使用某個類(抽象類或具體類)或接口,可以使用匿名類的方式,這樣不需自己定義一個My***類,然后再使用,比較方便。用法就是直接在new WindowAdapter()后面加入類定義,在其中實現(xiàn)或覆蓋方法就可以了。
匿名類不是返回值,而是相當于new String(“hello”)這種的擴展形式。我覺得匿名類的最多用處就是加監(jiān)聽器時。
附上WindowAdapter源代碼:
public?abstract?class?WindowAdapter
implements?WindowListener,?WindowStateListener,?WindowFocusListener
{
public?void?windowOpened(WindowEvent?e)?{}
public?void?windowClosing(WindowEvent?e)?{}
public?void?windowClosed(WindowEvent?e)?{}
public?void?windowIconified(WindowEvent?e)?{}
public?void?windowDeiconified(WindowEvent?e)?{}
public?void?windowActivated(WindowEvent?e)?{}
public?void?windowDeactivated(WindowEvent?e)?{}
public?void?windowStateChanged(WindowEvent?e)?{}
public?void?windowGainedFocus(WindowEvent?e)?{}
public?void?windowLostFocus(WindowEvent?e)?{}
}
一個一個來吧。
第一個問題:
并不是Label.Left無效,而是你API理解錯了。由于你之前的代碼里面是把Label放在一個Panel里面,Panel又放在了JFrame里面。而JFrame默認的布局管理器是BorderLayout,而你放入Panel時沒有指定放入位置,被默認放在了JFrame的Center位。所以Panel里面的控件都跟著跑到窗口的中間了,這時候你調(diào)用Label.Left只是把Label放在了Panel的最左邊(不寫這個也是如此),而Panel在JFrame的中間,所以,顯示效果是居中效果。
如果你希望Label到窗口的最左邊,只需要修改一句就可以了:
f.add(p, BorderLayout.WEST); // 將面板p加入到窗口f中
第二個問題:
從功能上說,兩者實現(xiàn)的內(nèi)容一樣,不過記住,匿名類里面調(diào)用外部變量需要將變量設置為final。內(nèi)部類本身也是一個類,需要一連串的定義,所以在監(jiān)控事件特別多的時候,就會導致代碼嚴重冗余,增加維護成本。而匿名類定義監(jiān)聽事件可以和控件寫在一起,同時不需要類定義,可以使代碼維護起來更容易一些。因此,一般情況下,我們都會使用匿名類來監(jiān)聽事件。
第三個問題:
Label屬于AWT的范疇,JLabel和其他以J開頭的控件都屬于Swing。后者屬于前者的擴展,同時也自成一家。AWT對系統(tǒng)依賴較高,不太適合跨平臺;Swing所有控件均是運行庫自帶,與平臺無關,運行在哪個系統(tǒng)上都是一個效果(PS:一樣的丑),所以適合跨平臺。
我建議你才用兩種方式中的一種。
第一種:
decreNo.addActionListener(new ActionListener(){
這里是你的響應代碼
});
這是匿名內(nèi)部類的方式
第二種:
最外面的類實現(xiàn)actionListener:
class AndroidApp extends Context implements ActionListener
{
JButton increNo = new JButton("Count up");
JButton decreNo = new JButton("Count down");
increNo.addActionListener(new increNoListener());
decreNo.addActionListener(new decreNoListener());
@override
public void actionPerformed(ActionEvent e)
{
//具體代碼
//這里兩個按鈕的響應函數(shù)可以都寫在這里,用傳入的e來判斷
}
}
你直接寫一個方法A,在你要監(jiān)聽的那根類的方法B中調(diào)用方法A,這樣B每次執(zhí)行當然就會調(diào)用A了。
分享名稱:關于java匿名類監(jiān)聽器代碼的信息
分享URL:http://www.chinadenli.net/article26/hgojcg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供、移動網(wǎng)站建設、品牌網(wǎng)站設計、Google、網(wǎng)站策劃、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)