




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、界面編程第1頁,共77頁,2022年,5月20日,8點23分,星期五Java圖形用戶界面概述圖形用戶界面概念圖形用戶界面(Graphical User Interface,GUI),使用圖形方式借助菜單、按鈕等標準界面元素和鍵盤、鼠標操作,實現人機交互。Java的AWT和Swingjava.awt包提供抽象窗口工具集(Abstract Window Tookit,AWT)。 javax.swing包提供JDK 1.2的Swing組件,它擴展了AWT組件的功能。 第2頁,共77頁,2022年,5月20日,8點23分,星期五AWT概述AWT可以說是Java中第一代的圖形編程類庫。AWT組件部分中的
2、一部分在Swing中有相應的替代者。例如Frame被擴展成Swing里的JFrame,Button被Swing的JButton替代等等。AWT中的其他部分如事件處理類、布局管理類、圖像類、工具類等仍然在使用。第3頁,共77頁,2022年,5月20日,8點23分,星期五Swing介紹Java1.2引入稱為Swing的新的GUI組件庫,是Sun公司用來描述下一代圖形界面的標準。 Swing繼承了AWT,但它是100純Java代碼實現,不依賴于任何平臺,并且可以自由設置和改變界面的整體風格Swing包括javax.swing包及其子包。Swing組件類大部分都以 J 開頭。第4頁,共77頁,2022
3、年,5月20日,8點23分,星期五Swing 應用程序的容器層次設計 GUI 時,都有用于放置可視化組件的主窗口。容器對象可用于將組件組合在一起。Swing 中的容器有兩類: - 頂級容器 - 中間容器 第5頁,共77頁,2022年,5月20日,8點23分,星期五頂級容器JFrame:用于框架窗口的類,此窗口帶有邊框、標題、用于關閉和最小化窗口的圖標等。帶 GUI 的應用程序通常至少使用一個框架窗口。JDialog:用于對話框的類。第6頁,共77頁,2022年,5月20日,8點23分,星期五中間容器JPanel:最靈活、最常用的中間容器。JScrollPane:與 JPanel 類似,但還可在
4、大的組件或可擴展組件周圍提供滾動條。JTabbedPane:包含多個組件,但一次只顯示一個組件。用戶可在組件之間方便地切換。JToolBar:按行或列排列一組組件(通常是按鈕)。第7頁,共77頁,2022年,5月20日,8點23分,星期五Swing GUI框架頂級容器JToolBar組件JTabbedPane組件JScrollPane組件第8頁,共77頁,2022年,5月20日,8點23分,星期五JFrame是放置其他 Swing 組件的頂級容器JFrame 組件用于在 Swing 程序中創建窗體它的構造函數:JFrame()JFrame(String Title)組件直接添加至 JFrame
5、 對象,示例: frame.add(b);第9頁,共77頁,2022年,5月20日,8點23分,星期五基本的 Swing 應用程序import javax.swing.*; public class HelloSwing public static void main(String args) JFrame frame = new JFrame(HelloSwing); JLabel label = new JLabel(你好,Swing); frame.getContentPane().add(label); frame.setSize(300,200); frame.setVisible(
6、true); 導入必要的包,一般還導入: import java.awt.*; import java.awt.event.*; 設置一個頂級容器創建一個Swing組件將組件添加到容器內容窗格第10頁,共77頁,2022年,5月20日,8點23分,星期五中間容器 JPanel(面板)面板不是一個單獨的窗口,它只是包含在窗口中的一個區域。面板是可以將許多組件組合起來的一種容器。最簡單的創建面板的方式就是通過面板的構造函數 JPanel() 來進行。 必須將面板添加到窗體中。第11頁,共77頁,2022年,5月20日,8點23分,星期五JButtonJButton類允許用圖標、字符串或兩者同時構造
7、一個按鈕。 構造函數如下:JButton()JButton(Icon icon):icon表示使用的圖標JButton(String text):text表示使用的字符串JButton(String text, Icon icon) ImageIcon buttonIcon1 = new ImageIcon(on.gif); JButton b1 = new JButton(First Button, buttonIcon1);創建一個帶圖標的JButton第12頁,共77頁,2022年,5月20日,8點23分,星期五JPanel和JButton使用示例import java.awt.*;im
8、port javax.swing.*;class PanelDemo extends JFrame JPanel cpane = new JPanel(); JButton ok = new JButton(確定); JButton cancel = new JButton(取消);public PanelDemo( String title) super(title); cpane.add(ok); cpane.add(cancel); cpane.setBackground(Color.BLACK); add(cpane,BorderLayout.SOUTH); public static
9、 void main(String args) PanelDemo pd=new PanelDemo(JPanel測試); pd.setSize(300,200); pd.setVisible(true); 第13頁,共77頁,2022年,5月20日,8點23分,星期五復選框(JCheckBox)復選框用于為用戶提供一組選項JCheckBox 類具有下列構造函數:JCheckBox()JCheckBox(Icon icon)JCheckBox(Icon icon, boolean selected)JCheckBox(String text)JCheckBox(String text, boo
10、lean selected)JCheckBox(String text, Icon icon)JCheckBox(String text, Icon icon, boolean selected)第14頁,共77頁,2022年,5月20日,8點23分,星期五單選按鈕(JRadioButton)單選按鈕允許用戶從多個選項中選擇其中一個ButtonGroup 用于在 Swing 中創建組JRadioButton 對象可使用下列構造函數創建:JRadioButton()JRadioButton(Icon icon)JRadioButton(Icon, boolean selected)JRadioB
11、utton(String text)JRadioButton(String text, boolean selected)JRadioButton(String text, Icon icon)JRadioButton(String text, Icon icon, boolean selected)第15頁,共77頁,2022年,5月20日,8點23分,星期五JCheckBox和JRadioButton使用示例import java.awt.*;import javax.swing.*;class Hobby extends JFrame JCheckBox c1 = new JCheckB
12、ox(閱讀,false); JCheckBox c2 = new JCheckBox(音樂,false); JCheckBox c3 = new JCheckBox(繪畫,false); JRadioButton rad1 = new JRadioButton(大專); JRadioButton rad2 = new JRadioButton(本科); JRadioButton rad3 = new JRadioButton(碩士); JLabel jl = new JLabel(您有什么愛好? ); JLabel j2 = new JLabel(您的最高學歷? ); JButton exit
13、btn = new JButton(退出); public Hobby( ) setLayout(new GridLayout(9,1); add(jl); add(c1); add(c2); add(c3); add(j2); add(rad1); add(rad2); add(rad3); add(exitbtn); public static void main(String args) Hobby pb=new Hobby(); pb.setSize(300,220); pb.setVisible(true); 第16頁,共77頁,2022年,5月20日,8點23分,星期五標簽(JLa
14、bel) 標簽(JLabel)用來顯示一段文本,常用在JTextField或者JTextArea前面,提示用戶要填寫什么樣的信息。Jlabel用于顯示文字,也可以同時顯示文字和圖標,構造函數如下:JLabel(Icon icon):icon表示使用的圖標JLabel(String text): text表示文本信息JLabel(String text,Icon icon,int align):text表示使用的字符串; icon表示使用的圖標;align表示水平對齊方式,其值可以為:LEFT、RIGHT、CENTER。 ImageIcon buttonIcon1 = new ImageIcon
15、(036.gif); Label calv_label = new JLabel(這是個球, buttonIcon1, JLabel.RIGHT); 第17頁,共77頁,2022年,5月20日,8點23分,星期五組合框( JComboBox )文本域和下拉列表的組合構造函數如下:public JComboBox(Object items) : 包含指定數組元素的組合框String names = 弗雷德里克.福西斯, 約翰.克里沙姆, 瑪麗.希金斯.克拉克,帕特麗夏.康威爾;JComboBox authors = new JComboBox(names); 第18頁,共77頁,2022年,5月
16、20日,8點23分,星期五列表( JList )在可供選擇的選項很多時,可向用戶呈現一個列表來供他們選擇public JList (Object listData) :構造一個列表以顯示指定數組listData的元素。 String stars = 安東尼奧.班德拉斯,來昂納多.迪卡普尼奧, 桑德拉.布洛克,休.格蘭特,朱莉亞.羅伯茨;JList moviestars = new JList(stars); 第19頁,共77頁,2022年,5月20日,8點23分,星期五文本域(JTextField)JTextField 組件允許輸入或編輯單行文本此類的構造函數包括:JTextField(int
17、 columns)JTextField(String text)JTextField(String text, int columns)JLabel jl = new JLabel(“文本域”); frame.add(jl);JTextField tf = new JTextField(20); frame.add(tf); 第20頁,共77頁,2022年,5月20日,8點23分,星期五標簽和文本域使用示例import java.awt.*;class TextLabelDemo extends Frame Label lblName=new Label(“名稱 :”); TextField
18、txtName=new TextField(20); public TextLabelDemo (String title) super(title);setLayout(new FlowLayout();add(lblName);add(txtName); public static void main(String args) TextLabelDemo t=new TextLabelDemo(正在測試組件!);t.setSize(300,200); t.show(); 新建一個標簽新建一個文本域添加到窗口第21頁,共77頁,2022年,5月20日,8點23分,星期五文本區(JTextAr
19、ea)JTextArea 組件用于接受來自用戶的多行文本JTextArea 組件可使用下列構造函數創建:JTextArea(int rows, int cols)JTextArea(String text)JTextArea(String text, int rows, int cols)JTextArea ta = new JTextArea(5,10); frame.add(ta); 第22頁,共77頁,2022年,5月20日,8點23分,星期五菜單顯示項目列表,指明各種任務。選擇或單擊某個選項時會打開另一個列表或子菜單。Swing 菜單由菜單欄、菜單和菜單項構成。菜單欄是所有菜單和菜單項
20、的根菜單第23頁,共77頁,2022年,5月20日,8點23分,星期五菜單欄(JMenuBar)菜單欄是窗口的主菜單,用來包括一組菜單。JMenuBar 是可通過 setJMenuBar方法添加到窗體。 JMenuBar menubar = new JMenuBar(); frame.setJMenuBar(menubar); 由多個 JMenu 組成。第24頁,共77頁,2022年,5月20日,8點23分,星期五菜單(JMenu)JMenu 在 JMenuBar 下以文本字符串形式顯示,而在用戶單擊它時,則以彈出式菜單顯示。 JMenu menu_file = new JMenu(文件);
21、menubar.add(menu_file); JMenu menu_edit = new JMenu(編輯); menubar.add(menu_edit); 第25頁,共77頁,2022年,5月20日,8點23分,星期五菜單項(JMenuItem)JMenu 或 JPopupMenu 中的一個組件,以文本字符串形式顯示,可以具有圖標 menu_file.add(new JMenuItem(打開); menu_file.add(new JMenuItem(保存); menu_file.addSeparator(); JMenuItem menuitem_exit = new JMenuIte
22、m(退出); menu_file.add(menuitem_exit)第26頁,共77頁,2022年,5月20日,8點23分,星期五Swing高級組件本小節講述對話框、表格、樹等高級應用。第27頁,共77頁,2022年,5月20日,8點23分,星期五JDialog( 對話框)(1)特點:1、顯示提示信息和接受用戶輸入 2、要有一個父窗口,父窗口關閉時,它其中的對話框也關閉 3、是Window的子類,是可移動窗口 4、對話框是不可見,要用setVisible(true)變為可見,可用setVisible(false)隱藏對話框 。(2)創建對象 JDialog d=new JDialog(f,”
23、dialog”,true);第28頁,共77頁,2022年,5月20日,8點23分,星期五(3)常用構造方法JDialog(Frame win,boolean b) 構造一個非可視的對話框,通過setVisible(true)變為可視,b為true時,對話框為可視時其它構件不能接收用戶的輸入,此為有模式狀態。JDialog(Frame win,String str,boolean b) 構造一個非可視的對話框 ,String類型為對話框的標題第29頁,共77頁,2022年,5月20日,8點23分,星期五簡單對話框(JOptionPane)該類提供了一系列靜態方法來生成一些簡單的標準對話框,比如
24、消息框、確認框和輸入框等。四種對話框可以采用靜態方法showXXXDialog()來顯示。如:showConfirmDialog() 顯示確認對話框、showInputDialog() 顯示輸入文本對話框、showMessageDialog() 顯示信息對話框、showOptionDialog() 顯示選擇性的對話框。第30頁,共77頁,2022年,5月20日,8點23分,星期五FileDialog(文件對話框)(Awt包)(1)特點:1、對文件進行選擇存取的組件, 2、是可移動窗口 3、是Dialog的子類 4、是非可視的,要用show( )或setVisible(true)變為可視(2)創
25、建對象 FileDialog f=new FileDialog(this,dialog,FileDialog.SAVE);文件對話框分為二種類型: 1、裝入或打開文件。2、保存文件 第31頁,共77頁,2022年,5月20日,8點23分,星期五文件選擇框(JFileChooser)打開或者保存文件的時候,經常用到文件選擇框(JFileChooser)。JFileChooser并不參與讀文件或者寫文件的操作。它只負責把文件路徑取回來。JFileChooser可以設置FileFilter,可以過濾某些類型的文件。第32頁,共77頁,2022年,5月20日,8點23分,星期五表格(JTable)表格
26、(JTable)用于以表格的形式顯示數據。與以往的JCompenent不同,JTable僅用于顯示數據,而數據的組織與管理等全部在模型接口TableModel里面實現。第33頁,共77頁,2022年,5月20日,8點23分,星期五樹(JTree)樹(JTree)是一種看起來比較直觀的視圖,它功能十分強大,可以呈現各種效果的樹狀結構。但是JTree的API也比較復雜。好在JTree中有一些默認的實現,可以完成基本的樹視圖。第34頁,共77頁,2022年,5月20日,8點23分,星期五第35頁,共77頁,2022年,5月20日,8點23分,星期五布局管理器用戶界面上的組件可以按不同方式排列。Jav
27、a使用布局管理器來管理這些排列方式。AWT提供一組用來進行布局管理的類,稱為布局管理器。第36頁,共77頁,2022年,5月20日,8點23分,星期五布局類型Java中的布局類型包括以下幾種:FlowLayout(流式布局)BorderLayout (邊界布局) GridLayout(網格布局)第37頁,共77頁,2022年,5月20日,8點23分,星期五如何設置布局每個容器(Container對象)都有一個與它相關的缺省的布局管理器。 在沒有設置新的布局前,在容器中添加組件都按照該容器的缺省布局排列。 第38頁,共77頁,2022年,5月20日,8點23分,星期五容器的默認布局管理器第39頁
28、,共77頁,2022年,5月20日,8點23分,星期五設置容器的布局管理器容器類提供設置布局管理器的方法frame1.setLayout(new FlowLayout();容器類提供添加和移去組件的方法public Component add(Component comp) /在容器中添加一個組件public void add(Component comp, Object constraints) /用于BorderLayout布局管理器public Component add(Component comp, int index) /用于GridLayout布局管理器第40頁,共77頁,202
29、2年,5月20日,8點23分,星期五流式布局(FlowLayout)流式布局是最簡單的布局管理器,它把組件依次排列,如果一行顯示不了就自動轉到下一行,像組件在流動一樣靈活。流式布局因此而得名。下面看一個例子。第41頁,共77頁,2022年,5月20日,8點23分,星期五FlowLayoutFlowLayout的構造函數有:FlowLayout( ):生成一個默認的流式布局FlowLayout(int alignment):可以設定每一行組件的對齊方式 FlowLayout(int alignment,int horz,int vert):可以設定組件間的水平和垂直距離JApplet和面板的缺省
30、布局默認組件從左上開始按從左到右、從上到下方式排列FlowLayout exLayout = new FlowLayout(FlowLayout.RIGHT);setLayout(exlayout); / 為容器設置新布局 第42頁,共77頁,2022年,5月20日,8點23分,星期五BorderLayout 2-1下面是BorderLayout所定義的構造函數:- BorderLayout( ):生成默認的邊界布局- BorderLayout(int horz,int vert): 可以設定組件間的水平和垂直距離 窗口和對話框等的缺省布局組件可被置于容器的北、南、東、西或中間位置第43頁,共
31、77頁,2022年,5月20日,8點23分,星期五BorderLayout 2-2 BorderLayout 類定義了幾個常量值以指定相應區域: BorderLayout.NORTH 對應容器的頂部BorderLayout.EAST 對應容器的右部BorderLayout.SOUTH 對應容器的底部BorderLayout.WEST 對應容器的左部BorderLayout.CENTER 對應容器的中部加入組件方法: void add(Component Obj, int region); . . . frame.setLayout(new BorderLayout(); Button btnE
32、ast=new Button(東); Button btnWest=new Button(西); Button btnNorth=new Button(北); Button btnSouth=new Button(南); Button btnCenter=new Button(中); frame.add(btnEast,BorderLayout.EAST); frame.add(btnWest,BorderLayout.WEST); frame.add(btnNorth,BorderLayout.NORTH); frame.add(btnSouth,BorderLayout.SOUTH); f
33、rame.add(btnCenter,BorderLayout.CENTER); . . .第44頁,共77頁,2022年,5月20日,8點23分,星期五網格布局(GridLayout)網格布局(GridLayout)把容器分成了規整的網格,每個網格內放置一個組件或者另一個容器。這些組件或者容器按照從左到右、從上到下的順序依次放置。GridLayout布局的行和列可以通過構造函數的參數確定。第45頁,共77頁,2022年,5月20日,8點23分,星期五GridLayoutGridLayout的構造函數如下所示: - GridLayout(int row,int col):生成一個設定行數和列數
34、的網格布局 - GridLayout(int row,int col,int horz,int vert):可以設置組件之間的水平和垂直間隔 用于將容器區域劃分為一個矩形網格組件按行和列排列. . . Button btn; / 聲明按鈕數組 String str=1,2,3,4,5,6,7,8,9; frame.setLayout(new GridLayout(3,3); btn=new Buttonstr.length; / 創建按鈕數組 for(int i=0;istr.length;i+) btni=new Button(stri); frame.add(btni); 第46頁,共77
35、頁,2022年,5月20日,8點23分,星期五第47頁,共77頁,2022年,5月20日,8點23分,星期五Java的基于授權(委托)的事件模型Java 最新的事件處理方法是基于授權事件模型事件源生成事件并將其發送至一個或多個監聽器監聽器簡單地等待,直到它收到一個事件。一旦事件被接受,監聽器將處理這些事件,然后返回。第48頁,共77頁,2022年,5月20日,8點23分,星期五事件在授權事件模型中,事件是一個描述事件源狀態改變的對象 ,界面編程中存在各種各樣的事件,并且在類庫中都已定義為相應的事件類 。 通過鼠標、鍵盤與 GUI 界面直接或間接交互都會生成事件。 如:按下一個按鈕、通過鍵盤輸入
36、一個字符、選擇列表框中的一項、點擊一下鼠標等。第49頁,共77頁,2022年,5月20日,8點23分,星期五事件監聽器接口:事件監聽器接口基本和事件類是一一對應的,并且在類庫中已定義監聽器類是實現監聽器接口的類,需要我們自己來完成(需要完成工作1)。 第50頁,共77頁,2022年,5月20日,8點23分,星期五 事件源(如:各種組件和容器)是一個生成事件的對象,它可以注冊一個或多個監聽器對象(需要完成工作2)。 事件源提供了一組方法,用于為事件注冊一個或多個監聽器。每種事件的類型都有其自己的注冊方法。一般形式為: public void addListener (TypeListener e
37、)事件源、監聽器和注冊監聽器某個事件源對象事件類型某個監聽器類的對象第51頁,共77頁,2022年,5月20日,8點23分,星期五按鈕單擊事件示例public class MyEventTest extends JFrame Button myButton = new Button(藍色); . . . / 創建面板或其他 GUI 組件 MyButton.addActionListener(new MyListener();class MyListener implements ActionListener public void actionPerformed(ActionEvent eve
38、nt) . . ./需要為事件進行的操作 實現了ActionListener接口的監聽器類實現了ActionListener接口的actionPerformed方法,以便根據參數 ActionEvent 事件類對象的信息對事件做出響應為按鈕事件注冊監聽器第52頁,共77頁,2022年,5月20日,8點23分,星期五按鈕單擊事件的響應及處理流程 第53頁,共77頁,2022年,5月20日,8點23分,星期五GUI類和事件監聽類的關系前面的例子都是直接將提供界面的類同時作為事件監聽器類。在復雜程序中經常是將GUI顯示的類和事件處理類分離在兩個類中。這樣有利于界面和業務邏輯的分離,提高了代碼的靈活性
39、和可重用性。然而,將事件處理器和圖形界面放在兩個類中時,又使得兩個類之間的數據交流變得復雜。因此,經常將事件處理器類定義成GUI類的的內部類,以便事件處理器中直接訪問GUI類中的成員變量。第54頁,共77頁,2022年,5月20日,8點23分,星期五AWT 事件類型 2-1事件類說明事件源ActionEvent 通常按下按鈕,雙擊列表項或選中一個菜單項時,就會生成此事件。 Button、List、MenuItem、TextField AdjustmentEvent 操縱滾動條時會生成此事件。 Scrollbar ComponentEvent 當一個組件移動、隱藏、調整大小或成為可見時會生成此事
40、件。Component ItemEvent 單擊復選框或列表項時,或者當一個選擇框或一個可選菜單的項被選擇或取消時生成此事件。 Checkbox、CheckboxMenuItem、Choice、List FocusEvent 組件獲得或失去鍵盤焦點時會生成此事件。 Component第55頁,共77頁,2022年,5月20日,8點23分,星期五AWT 事件類型 2-2事件類說明事件源KeyEvent 接收到鍵盤輸入時會生成此事件。 Component MouseEvent 拖動、移動、單擊、按下或釋放鼠標或在鼠標進入或退出一個組件時,會生成此事件。 Component ContainerEve
41、nt 將組件添加至容器或從中刪除時會生成此事件。Container TextEvent 在文本區或文本域的文本改變時會生成此事件 。TextField、TextArea WindowEvent 當一個窗口激活、關閉、失效、恢復、最小化、打開或退出時會生成此事件。 Window 第56頁,共77頁,2022年,5月20日,8點23分,星期五監聽器接口事件和事件監聽器接口基本上是一一對應打算處理事件的任何監聽器類都必須實現相應的監聽器接口。第57頁,共77頁,2022年,5月20日,8點23分,星期五監聽器接口列表 2-1事件監聽器 方法 ActionListener actionPerforme
42、d AdjustmentListener adjustmentValueChanged ComponentListener componentResizedcomponentMovedcomponentShowncomponentHidden ContainerListener componentAddedcomponentRemoved FocusListener focusLost、focusGained ItemListener itemStateChanged 第58頁,共77頁,2022年,5月20日,8點23分,星期五監聽器接口列表 2-2事件監聽器 方法 KeyListener
43、keyPressed、keyReleasedkeyTyped MouseListener mouseClicked、mouseEnteredmouseExited、mousePressedmouseReleased MouseMotionListener mouseDragged、mouseMoved TextListener textChanged WindowListener windowActivated、windowDeactivated windowClosed、windowClosingwindowIconified、windowDeiconifiedwindowOpened 第5
44、9頁,共77頁,2022年,5月20日,8點23分,星期五常見事件的處理舉例行為事件的處理窗口事件的處理第60頁,共77頁,2022年,5月20日,8點23分,星期五行為事件的處理產生條件:按鈕被按下、單行文本框中的回車、列表框的某項被雙擊或一個菜單項被選中行為事件的表示:1)從ActionEvent類生成一個對象監聽類:行為監聽器ActionListener2)表示:由實現了ActionListener接口的類的對象表示行為監聽器。3)必須實現的方法: acitonPerformed4)注冊一個行為事件源:需要調用組件的addActionListener方法。第61頁,共77頁,2022年,
45、5月20日,8點23分,星期五窗口事件的處理產生條件:當一個窗口被激活、撤消激活、打開、關閉、圖標化或撤消圖標化時窗口事件的表示:1)從WindowEvent類創建的對象表示窗口事件監聽類:窗口監聽器WindowListener2)表示:由實現了WindowListener接口的對象來表示窗口監聽器。3)必須實現的方法: WindowListener接口指定了7種必須實現的方法,分別對應窗口的7種不同事件種類。4)注冊一個窗口事件源,需要調用組件的addWindowListener方法。第62頁,共77頁,2022年,5月20日,8點23分,星期五窗口事件當一個窗口被激活、失活、關閉、正在關閉
46、、最小化、最大化、打開時將生成窗口事件。需要實現的方法如下:windowActivated、 windowClosedwindowClosing、 windowDeactivatedwindowDeiconified、windowIconifiedwindowOpened第63頁,共77頁,2022年,5月20日,8點23分,星期五窗口事件的處理windowOpened當窗口打開時windowClosing單擊窗口右上角關閉按鈕嘗試關閉窗口時windowIconified單擊窗口的最小化圖標,窗口最小化時執行方法windowDeiconified單擊窗口的還原按鈕,窗口還原時執行windowA
47、ctivated當窗口在一系列窗口之前,成為當前窗口時執行,當打開窗口、還原窗口或點擊某個窗口到前臺都會調用該方法。windowDeactivated當某個窗口從前臺移走時,例如圖標化、關閉窗口或另外一個窗口被激活等,windowClosed當窗口關閉之后,執行了窗口的dispose方法后執行第64頁,共77頁,2022年,5月20日,8點23分,星期五 適配器 例子: 象WindowListener接口,有7個方法,而很多程序中可能只用到其中的windowClosing方法,以便寫上窗口右上角的關閉按鈕的關閉程序功能。這樣就使程序編寫顯得非常麻煩。第65頁,共77頁,2022年,5月20日,
48、8點23分,星期五 為簡化程序,Java類庫中預定義了一些特殊類,這些類已經實現了相應的監聽器接口,所有方法都寫上了空語句。 編寫事件監聽器類時,便可通過繼承這些特殊的類來達到實現相應的事件監聽器接口的目的,同時又可以只選擇程序中需要的方法進行重寫,非常方便。 Java中將這些預定義的類稱為事件適配器類,類似于監聽器接口,適配器第66頁,共77頁,2022年,5月20日,8點23分,星期五適配器類 事件監聽器接口 ComponentAdapter ComponentListener ContainerAdapter ContainerListener FocusAdapter FocusLis
49、tener KeyAdapter KeyListener MouseAdapter MouseListener MouseMotionAdapter MouseMotionListener WindowAdapter WindowListener 第67頁,共77頁,2022年,5月20日,8點23分,星期五 為方便使用,這些類的名稱有一定的規則:只要將相應接口名稱中的Listener改為Adapter即是該監聽器接口對應的適配器類。 如WindowListener對應的適配器類為WindowAdapter,MouseListener對應的適配器類為MouseAdapter。 有一些接口如AcitonListener,本身只有一個方法需要實現,JDK中就沒有定義該接口的Adapter第68頁,共77頁,2022年,5月20日,8點23分,星期五窗口事件示例import java.awt.*;import java.awt.event.*;class MyFrame extends Frame public MyFrame() setTitle(測試適配器類); setSize(300, 200); addWindowListener(new MyWindowAdapter(); class MyWindowAdapter e
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年初級銀行從業資格之初級個人理財考前沖刺模擬試卷B卷含答案
- 社團活動精細化管理計劃
- 2025年公寓的標準租賃合同
- 2025合同管理的核心原則與實踐合同法
- 2025租房合同范本「正式版」
- 學習方式變革與推廣計劃
- 機車雙機重聯連接總風管得原因
- 貨車內循環和外循環的詳細說明
- 上門喂養寵物協議合同樣本
- 出國干活簽合同標準文本
- 山東省臨沂市河東區2023-2024學年七年級下學期期中測試歷史試題
- 江蘇省昆山、太倉、常熟、張家港市2023-2024學年下學期七年級數學期中試題
- MOOC 敦煌文學藝術-浙江師范大學 中國大學慕課答案
- MOOC 大地測量學基礎-南京信息工程大學 中國大學慕課答案
- 運輸安保工作方案
- 生物地球化學性疾病試題
- 休閑與旅游農業課件
- 產品驗證報告
- 電影項目融資計劃書
- 感覺障礙護理課件
- 中醫禁食療法專家共識
評論
0/150
提交評論