java中接口适配器实现,12.1.8 Java中的应用-AWT事件适配器(接口的适配器模式)...
12.1.8? Java中的應用-AWT事件適配器(接口的適配器模式)
從以上的學習我們已經了解到,基于接口的適配器模式是采用抽象化接口的方式,來達到節省接口函數的目的,這一特性特別適合于Java AWT中的事件處理模式。對于定義的事件監聽器接口,它可能包含多個事件處理函數,但在使用時我們往往只需要關注其中的某一種事件,此時就可以使用抽象化適配來將事件監聽器接口進行抽象化,給出每一個接口函數的默認實現,這樣在需要使用時只需要重寫自己需要的函數即可,如圖12-8所示。
從圖中可以看出,共分為3層:
***層是EventListener頂層事件接口類,它只是定義了一個接口,沒有包含任何接口函數。
第二層是AWT的事件監聽器接口(以Listener為結尾),每一個監聽器接口對應一種窗口事件,其中定義了多個事件處理函數。
第三層是AWT的事件適配器抽象類(以Adapter為結尾),它們分別為對應的監聽器接口提供了默認的函數實現。
所有的適配器抽象類都采用了接口的適配器模式來實現。例如,鼠標監聽器接口中定義了5個鼠標事件接口函數,如程序12-16所示。
程序12-16? 鼠標監聽器接口MouseListener.javapackagejava.awt.event;
importjava.util.EventListener;
publicinterfaceMouseListenerextendsEventListener?{
/**
*?鼠標單擊事件
*/
publicvoidmouseClicked(MouseEvent?e);
/**
*?鼠標按下事件
*/
publicvoidmousePressed(MouseEvent?e);
/**
*?鼠標釋放事件
*/
publicvoidmouseReleased(MouseEvent?e);
/**
*?鼠標進入事件
*/
publicvoidmouseEntered(MouseEvent?e);
/**
*?鼠標退出事件
*/
publicvoidmouseExited(MouseEvent?e);
}
當我們要使用該接口編寫鼠標事件處理代碼時,就需要實現該接口,并實現5個事件函數,如程序12-17所示。
程序12-17? 自定義的鼠標實現類importjava.awt.event.MouseEvent;
importjava.awt.event.MouseListener;
publicclassMyMouseListenerimplementsMouseListener?{
@Override
publicvoidmouseClicked(MouseEvent?arg0)?{
System.out.println("鼠標單擊事件");
}
@Override
publicvoidmousePressed(MouseEvent?arg0)?{
System.out.println("鼠標按下事件");
}
@Override
publicvoidmouseReleased(MouseEvent?arg0)?{
System.out.println("鼠標釋放事件");
}
@Override
publicvoidmouseEntered(MouseEvent?arg0)?{
System.out.println("鼠標進入事件");
}
@Override
publicvoidmouseExited(MouseEvent?arg0)?{
System.out.println("鼠標退出事件");
}
}
然而,我們可能只需要處理其中的某一個事件,卻不得不編寫所有的接口函數,此時就可以使用適配器類MouseAdapter了。
該適配器實現了3個鼠標相關的事件接口,并為這些接口中的所有函數都提供了默認的實現,這些實現的代碼為空,表示什么也不做,如程序12-18所示。
程序12-18? 鼠標事件適配器MouseAdapter.javapackagejava.awt.event;
publicabstractclassMouseAdapterimplementsMouseListener,
MouseWheelListener,?MouseMotionListener?{
publicvoidmouseClicked(MouseEvent?e)?{}
publicvoidmousePressed(MouseEvent?e)?{}
publicvoidmouseReleased(MouseEvent?e)?{}
publicvoidmouseEntered(MouseEvent?e)?{}
publicvoidmouseExited(MouseEvent?e)?{}
publicvoidmouseWheelMoved(MouseWheelEvent?e){}
publicvoidmouseDragged(MouseEvent?e){}
publicvoidmouseMoved(MouseEvent?e){}
}
此時如果我們只希望處理鼠標單擊事件,只需要繼承適配器MouseAdapter,
并重寫單擊事件函數mouseClicked()即可,如程序12-19所示。
程序12-19單擊事件處理程序MyMouseClickedListener.java
importjava.awt.event.MouseEvent;
importjava.awt.event.MouseAdapter;
publicclassMyMouseClickedListenerextendsMouseAdapter?{
@Override
publicvoidmouseClicked(MouseEvent?arg0)?{
System.out.println("鼠標單擊事件");
}
}
由此可見,通過使用事件的適配器,可以讓我們的代碼只關注自己的事件,而不必造成不必要的代碼浪費。這就是適配器模式在事件處理中的應用。
【責任編輯:董書 TEL:(010)68476606】
點贊 0
總結
以上是生活随笔為你收集整理的java中接口适配器实现,12.1.8 Java中的应用-AWT事件适配器(接口的适配器模式)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于php的应用程序,基于PHP的Web
- 下一篇: java list数据的更新,java