Java第9章---圖形用戶界面課件_第1頁
Java第9章---圖形用戶界面課件_第2頁
Java第9章---圖形用戶界面課件_第3頁
Java第9章---圖形用戶界面課件_第4頁
Java第9章---圖形用戶界面課件_第5頁
已閱讀5頁,還剩96頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第9章 圖形用戶界面了解Java GUI的發(fā)展歷史掌握常用Swing組件的功能和應用掌握eclipse可視化開發(fā)環(huán)境下圖形用戶界面的設(shè)計方法理解Java的事件處理機制學習目標:9.1生成圖形化用戶界面9.2框架9.3Java布局管理9.4 Java事件處理9.5常用Swing組件的使用9.6實訓:簡易聊天界面9.7習題 第9章 圖形用戶界面9.1.1GUI概述9.1.2 Java圖形用戶界面的構(gòu)成9.1生成圖形化用戶界面 圖形用戶界面可以為應用程序提供想要的“外觀”或表示,然后對其添加必要的業(yè)務(wù)邏輯程序,以便使它們能夠發(fā)揮效用。在該界面下用戶往往只需通過單擊、雙擊、拖曳鼠標和簡單的文字鍵入就可

2、以輕松地操作計算機完成任務(wù)。圖形用戶界面生動形象、操作直觀簡便。 圖形用戶界面(Graphics User Interface,簡稱GUI)是指以圖形的方式實現(xiàn)人與計算機之間的交互。用戶與這些組件(例如按鈕、文本、列表等)進行交互,為系統(tǒng)提供信息和從系統(tǒng)獲取信息,以便完成客戶的需求。1. AWT 當Java在1995年的春天第一次發(fā)布的時候,它包含了一個叫AWT(Abstract Windowing Toolkit)的庫,用來構(gòu)建圖形用戶界面應用程序。Java很有雄心的宣言write once, run anywhere許諾:一個具有下拉菜單,命令按鈕,滾動條以及其他常見的GUI控件的應用程序

3、將能夠在各種操作系統(tǒng)上運行而不必重新編譯成針對某一平臺的二進制代碼。9.1.1 GUI概述 為了方便用Java構(gòu)建圖形用戶界面,Sun最初提供了一個在所有平臺下具有的獨特Java外觀的圖形界面庫。Sun在applet技術(shù)策略方面的首要伙伴Netscape提出applets應該維持和運行時平臺一樣的外觀。他們希望applets在某一平臺下在顯示和行為上能夠像其他應用程序一樣。為了實現(xiàn)Netscape的本地外觀的目標,在JDK的第一個發(fā)布版中包含了AWT這個庫。但是當利用AWT來構(gòu)建圖形用戶界面的時候,實際上是在利用本地操作系統(tǒng)所提供的圖形庫,也就是說AWT所提供的圖形設(shè)計功能是有一定局限性的。使

4、用AWT開發(fā)出來的圖形用戶界面在使用上非常的不靈活。比如AWT所包含的組件,其外觀是固定的,無法改變,這就使得開發(fā)出來的界面非常死板。2Swing 由于awt包的不足表現(xiàn),SUN公司于1998年針對它存在的問題,對其進行了擴展,開發(fā)出新的GUI組件叫做Swing。Swing是Java語言提供的第二代設(shè)計工具,它以AWT為基礎(chǔ),提供了比AWT更多的特性和工具,用于建立更復雜的圖形用戶界面。Swing開發(fā)人員只用很少的代碼就可以利用Swing豐富、靈活的功能和模塊化組件來創(chuàng)建優(yōu)雅的用戶界面。 工具包中所有的包都是以swing作為名稱,例如javax.swing,javax.swing.event。

5、現(xiàn)在常采用Swing組件來開發(fā)GUI應用程序。 Java圖形用戶界面主要由容器、標準組件和用戶自定義成分構(gòu)成。 容器是用來組織其他界面成分和元素的單元。一般一個圖形用戶界面對應一個復雜容器。 標準組件是圖形用戶界面的最小單位,它里面不再包含其他的成分。GUI組件是圖形用戶界面標準化的結(jié)果。常用的組件有(1)選擇類:單選按鈕、復選按鈕、下拉列表;(2)文字處理類的:文本框、文本區(qū)域;(3)命令類的: 按鈕、菜單等。GUI組件的作用是完成與用戶的交互。包括接收用戶的命令、文本或選擇輸入,向用戶顯示一段文本或一個圖形等。9.1.2 Java圖形用戶界面的構(gòu)成 用戶自定義成分是指編程人員根據(jù)用戶需要設(shè)

6、計一些用戶自定義的圖形界面成分,如顯示文字、繪制圖形、顯示圖象等。但用戶自定義成分不能像標準組件一樣被系統(tǒng)識別和承認,只起裝飾作用。不能響應用戶的動作,不具有交互功能。如圖9-1所示。9.2.1 構(gòu)建框架9.2.2 添加組件9.2 框架 在應用程序中,使用框架作為容器,在框架中放置組件。SWING組件從功能上分為:容器和基本組件;容器又分為頂層容器和中間層容器。 (1)頂層容器:JFrame、JDialog、JApplet 。用于構(gòu)造圖形用戶界面的窗口,并容納其它容器和組件,它們可以獨立存在 。(2)中間層容器 :JPanel、JScrollPane、JToolBar等。容納其它組件,但是不能

7、獨立存在,需要添加到其它容器中。通常用來按功能組織基本組件 。基本組件:按鈕JButton、文本框JTextField等等。是圖形用戶界面的基本組成單位,不能獨立存在,必須將其添加到一定的容器中。 在Java中,頂層窗口被稱為框架。在AWT中這個類被稱為Frame,在Swing中稱為JFrame,它擴展于Frame類。JFrame創(chuàng)建的框架窗口可以獨立存在,并且?guī)в羞吙?、標題及用于關(guān)閉和最大化、最小化窗口的圖標按鈕。 【例9-1】創(chuàng)建一個框架窗口舉例。解題思路:每一個Java的GUI程序都必須至少包含一個頂層容器組件作為窗口。代碼:程序JFrameDemo.javaimport javax.s

8、wing.*; public class JFrameDemo extends JFrame public JFrameDemo()super(JFrame窗口); 9.2.1 構(gòu)建框架setBounds(50,50,300,120); setDefaultCloseOperation(EXIT_ON_CLOSE);setVisible(true); public static void main(String args) JFrameDemo f = new JFrameDemo(); 運行結(jié)果如圖9-2所示。圖9-2 一個窗口運行結(jié)果 【說明】 public void setBounds(

9、int x,int y,int width,int height) 是設(shè)置出現(xiàn)在屏幕上時的初始位置為(x,y),即距屏幕左面x個像素,距屏幕上方y(tǒng)個像素;width是窗口的寬,height是高。構(gòu)成圖形用戶界面的各種元素稱為組件。容器是圖形用戶界面中容納組件的部分,一個容器可容納一個或多個組件,甚至可以容納其他容器。【例9-2】在窗口中添加組件舉例。解題思路:放在“JFrame”中的每個一信息都是一個組件。代碼:程序FrameEx.javaimport java.awt.*;import javax.swing.*;public class FrameEx public void go() 9

10、.2.2添加組件 JFrame win = new JFrame(JFrame); Container contentPane = win.getContentPane(); contentPane.setLayout(new GridLayout(5,1); JLabel labOne = new JLabel(Swing組件學習,JLabel.CENTER); JLabel labTwo = new JLabel(計算機學院,JLabel.CENTER); JButton queding = new JButton(確定); contentPane.add(labOne); content

11、Pane.add(labTwo); contentPane.add(queding); win.setSize(200,200); win.setVisible(true); public static void main(String arg) FrameEx fe = new FrameEx(); fe.go(); 運行結(jié)果如圖9-3所示。 【說明】 第1行和第2行的作用就是將awt包和swing包引入到該程序中,因為該程序中要用到awt包和swing包中的類。例如Container類和GridLayout類都屬于awt包。其他以“J”開頭的類都屬于swing包。Containe類是Jav

12、a語言的開發(fā)者事先定義好的類。關(guān)于這個類的一些功能也是設(shè)定好的。作為使用者,只要將這個類用import的方式引入到自己的程序中就可以使用它了。這兩個包的引用會在圖形用戶界面的程序中經(jīng)常用到。9.3.1BorderLayout9.3.2FlowLayout9.3.3GridLayout9.3.4CardLayout9.3.5案例1:常用布局管理器設(shè)計計算器界面9.3 Java布局管理 組件在被放到容器中時,要遵循一定的布局方式。在Java的圖形用戶界面中,有專門的類來管理組件的布局,稱這些類為布局管理器。在“JFrame”中每一條信息都是一個組件,這些組件應該如何安排就是由布局管理器負責的。所謂

13、的布局管理器,實際上就是能夠?qū)M件進行布局管理的類。用吃飯的例子就能很好的說明容器、組件和布局之間的關(guān)系。容器就是吃飯的桌子,組件就是一盤盤的菜。我們吃飯時要安排菜應該放在什么位置,這就是布局管理器。 BorderLayout又稱邊界布局管理器,它將窗口劃分為東、西、南、北、中五個區(qū)域,這五個區(qū)域分別用英文East、West、South、North、Center表示。用參數(shù)BorderLayout.EAST、BorderLayout.WEST、BorderLayout.SOUTH、BorderLayout.NORTH和BorderLayout.CENTER來表示。在窗口中添加組件時,系統(tǒng)會根據(jù)

14、參數(shù)將組件擺放到窗口的相應位置?!纠?-3】應用BorderLayout布局舉例。 解題思路:通過setLayout()方法可以完成BorderLayout布局管理器的設(shè)置,語句為:contentPane.setLayout(new BorderLayout();9.3.1BorderLayout代碼:程序BorLayDemo.javaimport java.awt.*;import javax.swing.*;public class BorLayDemo extends JFrame private JButton myButton1,myButton2,myButton3,myButto

15、n4,myButton5;public BorLayDemo() super(BorderLayout布局); setBounds(50,50,300,120); setLayout(new BorderLayout(); /設(shè)置窗口為邊界布局setDefaultCloseOperation(EXIT_ON_CLOSE);setVisible(true);myButton1=new JButton(東按鈕);myButton2=new JButton(南按鈕);myButton3=new JButton(西按鈕);myButton4=new JButton(北按鈕);myButton5=new

16、 JButton(中間按鈕);add(East,myButton1); /添加按鈕到窗口指定方位add(South,myButton2);add(West,myButton3);add(North,myButton4);add(Center,myButton5);public static void main(String args) BorLayDemo f = new BorLayDemo(); 運行結(jié)果如圖9-4所示。圖9-4 BorderLayout布局運行結(jié)果【說明】在窗口中添加組件時,系統(tǒng)會根據(jù)參數(shù)將組件擺放到窗口的相應位置。如果當中央位置沒有擺放組件時,位置被空缺,其他位置的組件

17、不會占用中央的位置。 FlowLayout是一個最簡單的布局管理器,這個布局管理器的功能就是將容器中的組件從左到右,從上到下的排列。因此,它又被稱為流布局管理器?!纠?-4】 應用FlowLayout布局舉例。解題思路:采用FlowLayut布局管理器,所有組件是按照添加時的順序,按從左到右,從上到下的順序排列的。代碼:程序FlowLayDemo.javaimport java.awt.*;import javax.swing.*;public class FlowLayDemo extends JFrame private JButton myButton1,myButton2,myButt

18、on3,myButton4,myButton5;9.3.2FlowLayoutpublic FlowLayDemo() / FlowLayDemo類的構(gòu)造方法 super(FlowLayout布局); setBounds(60,60,200,150); setLayout(new FlowLayout(); /設(shè)置窗口為流式布局setDefaultCloseOperation(EXIT_ON_CLOSE);setVisible(true);myButton1=new JButton(按鈕1); /生成按鈕對象myButton2=new JButton(按鈕2);myButton3=new JB

19、utton(按鈕3);myButton4=new JButton(按鈕4);myButton5=new JButton(按鈕5);add(myButton1); /添加按鈕到窗口上圖7.4(a) 流式布局add(myButton2);add(myButton3);add(myButton4);add(myButton5);public static void main(String args) FlowLayDemo f=new FlowLayDemo(); 運行結(jié)果如圖9-5所示。圖9-5 FlowLayout布局運行結(jié)果 【說明】默認情況下,第一個被添加的組件擺放在第1行居中位置,其后添加

20、的組件擺放在第一個組件的后面。當?shù)?行再也放不下組件的時候,其后的組件從第2行開始從左到右擺放。以此類推,直到添加完所有組件。GridLayout又稱網(wǎng)格布局管理器。相對于FlowLayout和BorderLayout來說,GridLayout局管理器是比較靈活的一種管理器。它可以通過行數(shù)和列數(shù)的設(shè)置,把窗口劃分成若干個單元格,將組件放在這些單元格里?!纠?-5】 應用GridLayout布局舉例。解題思路:GridLayout的括號中兩個參數(shù)的含義就是(行數(shù),列數(shù))。通過改變這兩個參數(shù)的值,將窗口劃分成不同的單元格。代碼:程序GridLayDemo.javaimport java.awt.*

21、;import javax.swing.*;public class GridLayDemo extends JFrame 9.3.3GridLayoutprivate String names=按鈕a,按鈕b,按鈕c,按鈕d,按鈕e,按鈕f;public GridLayDemo() super(GridLayout布局); setBounds(60,60,300,200); setLayout(new GridLayout(3,3); /設(shè)置三行三列網(wǎng)格布局setDefaultCloseOperation(EXIT_ON_CLOSE);setVisible(true);for (int i=

22、0;inames.length;i+) add(new JButton(namesi); /依次添加各個按鈕public static void main(String args) GridLayDemo f=new GridLayDemo(); 運行結(jié)果如圖9-6所示。圖9-6 GridLayout布局運行結(jié)果 【說明】GridLayout布局管理器也可以不設(shè)置行數(shù)和列數(shù),這時系統(tǒng)會默認行數(shù)和列數(shù)均為1。如果要擺放的組件大于GridLayout所設(shè)置的單元格個數(shù),多出來的組件也會被擺放在窗口中,但是會破壞原來的單元格樣式。 CardLayout又稱卡片布局。使用CardLayout容器可以容

23、納多個組件,但是實際上同一時刻容器只能從這些組件中選出一個來顯示,就像一疊“撲克牌”每次只能顯示最上面的一張一樣,這個被顯示的組件將占據(jù)所有的容器空間?!纠?-5】 應用CarLayout布局舉例。解題思路:在選項卡窗格中添加5個按鈕,并設(shè)置相對應的選項卡的文本提示,然后將選項卡窗格添加到窗體的內(nèi)容面板中。代碼:程序CardLayDemo.javaimport java.awt.*;import javax.swing.*;9.3.4CardLayoutpublic class CardLayDemo extends JFrame JTabbedPane p;Icon icon;private

24、 String imageName=a.jpg,b.jpg,c.jpg,d.jpg,e.jpg;public CardLayDemo() super(CardLayout布局); setBounds(100,100,500,300); setVisible(true);icon=new IconimageName.length;for (int i=0;iicon.length;i+) iconi=new ImageIcon(imageNamei);p=new JTabbedPane(JTabbedPane.LEFT);for (int i=0;iicon.length;i+)int m=i+

25、1;p.add(觀看第+m+個圖片,new JButton(iconi); p.validate();add(p,BorderLayout.CENTER); validate();setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);public static void main(String args) CardLayDemo f=new CardLayDemo(); 運行結(jié)果如圖9-7所示。圖9-7 CarLayout布局運行結(jié)果【說明】本例中用了嵌套JTabbedPane的窗體。解題思路:對窗體應用邊界布局,在NORTH上放置一個文本框,在C

26、ENTER上放置一個面板,面板上放置計算器的相應按鈕。代碼:GridFrame.javaimport java.awt.*;import javax.swing.*;class GridFrame extends JFrame /定義面板,并設(shè)置為網(wǎng)格布局,4行4列,組件水平、垂直間距均為3 JPanel p=new JPanel(new GridLayout(4,4,3,3); JTextArea t=new JTextArea(); /定義文本框 /定義字符串數(shù)組,為按鈕的顯示文本賦值 String 9.3.5案例1:常用布局管理器設(shè)計計算器界面str=7,8,9,/,4,5,6,*,1,

27、2,3,-,0,.,=,+; public GridFrame(String s) super(s); /為窗體名稱賦值 setLayout(new BorderLayout(); /定義窗體布局為邊界布局 JButton btn; /聲明按鈕數(shù)組 btn=new JButtonstr.length; /創(chuàng)建按鈕數(shù)組 for(int i=0;istr.length;i+) btni=new JButton(stri); p.add(btni); getContentPane().add(t,BorderLayout.NORTH); /將文本框放置在窗體NORTH位置 getContentPan

28、e().add(p,BorderLayout.CENTER); /將面板放置在窗體CENTER位置 setVisible(true); setSize(250,200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); /讓窗體居中顯示 public static void main(String args) GridFrame gl=new GridFrame(一個簡單的計算器); 運行結(jié)果如圖9-8所示。9.4.1事件和事件源9.4.2事件監(jiān)聽器9.4.3監(jiān)聽器接口9.4 Java事件

29、處理從JDK1.1開始起,Java語言采用基于代理的事件處理模型。當用戶在文本框中鍵入文本后按回車鍵、單擊按鈕、在一個下拉式列表中選擇一個條目等操作時,都發(fā)生界面事件?;诖硎录幚砟P褪且M了監(jiān)聽器接口,每個事件類都有相關(guān)聯(lián)的監(jiān)聽器接口。GUI組件如果注冊了相關(guān)的監(jiān)聽器對象,監(jiān)聽器對象會一直監(jiān)聽已注冊的組件對象是否有事件發(fā)生。當監(jiān)聽器對象監(jiān)聽到組件有相對應的事件發(fā)生,就會調(diào)用監(jiān)聽器對象中方法,即事件處理器來實現(xiàn)一定的動作。就這樣,通過對目標監(jiān)聽器對象的相關(guān)Java方法調(diào)用,實現(xiàn)事件從事件源到監(jiān)聽者的傳遞。 在學習處理事件時,必須很好的掌握事件源、監(jiān)聽器和處理事件的接口這三個概念。 事件是程

30、序運行中出現(xiàn)的行為和動作的反映。典型的事件包括:單擊按鈕、在文本框輸入數(shù)據(jù)等。當用戶移動鼠標,單擊按鈕時,一個事件就產(chǎn)生了??赡墚a(chǎn)生事件的組件稱為事件源,不同事件源上發(fā)生的事件種類是不同的。例如:按鈕JButton button = new JButton();圖形界面都是事件驅(qū)動的,即當用戶和界面進行交互通信時產(chǎn)生事件,并由此觸發(fā)事件處理程序。9.4.1事件和事件源 若希望事件源上引發(fā)的事件被程序處理,需要將事件源注冊這 種事件類型的監(jiān)聽器。監(jiān)聽器具有監(jiān)聽和處理某類事件的功能。例如,可以給按鈕的動作事件(ActionEvent)注冊一個動作事件監(jiān)聽器(ActionListener) 。通過注

31、冊監(jiān)聽器,我們可以監(jiān)聽事件源產(chǎn)生的事件,從而在事件處理程序中處理我們所需要處理的用戶行為。 當用戶單擊這個按鈕時,標簽里的文字由“HELLO!”變成“你好!”程序如下:9.4.2事件監(jiān)聽器事件處理過程:(1)利用addActionListener方法為JButton按鈕添加了一個監(jiān)聽器;(2)當事件源button發(fā)生動作事件時,即用戶單擊按鈕,按鈕就會自動調(diào)用監(jiān)聽器對象中的actionPerformed(ActionEvent arg0)方法,并且所發(fā)生的動作事件以一個ActionEvent類型的對象傳遞進來。一個事件監(jiān)聽器可以處理一類事件,要使監(jiān)聽器具有處理某一類事件的能力,就需要讓監(jiān)聽器實

32、現(xiàn)相應的事件監(jiān)聽器接口,即一個監(jiān)聽器對象是一個實現(xiàn)了特定監(jiān)聽器接口的類的實例。一般語法形式如下:9.4.3監(jiān)聽器接口【例9-6】一個文字框的文字顏色設(shè)置的程序舉例。解題思路:導入事件處理的軟件包java.awt.event,然后定義文本框組件和按鈕組件;再將按鈕組件注冊相應的監(jiān)聽器對象。代碼:程序SimpleEventHandling.javaimport java.awt.*;import javax.swing.*;import java.awt.event.*; public class SimpleEventHandling extends JFrame implements Acti

33、onListener /實現(xiàn)接口JTextField text; /定義文本框textJButton colorButton; /定義選顏色的按鈕colorButtonContainer container; public SimpleEventHandling()super(顏色版);container=getContentPane();container.setLayout(new FlowLayout();text=new JTextField(我可以變顏色); colorButton=new JButton(請選擇你喜歡的顏色);colorButton.addActionListene

34、r(this); /注冊監(jiān)聽器container.add(text);container.add(colorButton);pack();setVisible(true);public void actionPerformed(ActionEvent e) /實現(xiàn)接口ActionListener的方法actionPerformed() if(e.getSource()=colorButton) Color colorstyle=Color.black; colorstyle=JColorChooser.showDialog(this,選擇顏色,colorstyle); text.setFore

35、ground(colorstyle); colorButton.setForeground(colorstyle); public static void main(String args)SimpleEventHandling seh=new SimpleEventHandling();seh.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);運行結(jié)果如圖9-9所示。圖9-9 運行結(jié)果【說明】本例是實現(xiàn)一個ActionListener接口,所以,注冊按鈕組件到實現(xiàn)該接口的實例對象。為了能出現(xiàn)顏色的選擇處理,對ActionListener接口的方法a

36、ctionPerformed()進行定義,實現(xiàn)顏色選擇的動作。 Java語言中提供事件處理的包主要有java.awt.event和javax.swing.event包。其中,java.awt.event包提供了對awt包和swing包常見組件的支持,與事件處理相關(guān)常見的的事件類和事件監(jiān)聽器接口見表9-1。 通過實現(xiàn)監(jiān)聽器接口來編寫一個監(jiān)聽器類的時候,接口中所定義的所有抽象方法都需要被實現(xiàn),即使對處理某個事件的方法不感興趣,仍然要編寫一個空方法體。這樣在某些情況會很繁瑣。為了解決這個問題,AWT提供了與監(jiān)聽器接口配套的適配器類。對于監(jiān)聽器接口里定義的每個抽象方法,在適配器類中都有一個空的實現(xiàn)方法

37、,這樣可以減少編程的繁瑣。java.awt.event中的適配器類見表9-2。【例9-7】菜單事件舉例。 解題思路:菜單項是JMenuItem對象,可以通過點擊動作來激活動作事件;菜單項是JCheckBoxMenuItem對象,可以采用選項事件處理的方式進行處理。菜單項是JRadioButtonMenuItem對象,則可以選擇用動作事件或選項事件處理。代碼:程序SimpleMenu.javaimport java.awt.*;import javax.swing.*;import java.awt.event.*; public class SimpleMenu extends JFrame

38、JMenuBar b; /定義菜單條 JMenu menua,menub,menuc; /定義菜單 JCheckBoxMenuItem a1; /定義復選菜單項 JCheckBoxMenuItem b2; /定義復選菜單項 JRadioButtonMenuItem c3; /定義單選菜單項 ButtonGroup group; /定義按鈕組 JTextArea displayArea; /定義文本區(qū)public SimpleMenu()super(院系導航);Container c=getContentPane();b=new JMenuBar(); /創(chuàng)建菜單條menua=new JMenu

39、(計算機學院); /創(chuàng)建菜單a1=new JCheckBoxMenuItem3; /創(chuàng)建菜單項for(int i=0;ia1.length;i+) a1i=new JCheckBoxMenuItem(計算機學院系+(i+1); menua.add(a1i); a1i.addItemListener(new CheckBoxListener(); menub=new JMenu(外語學院); b2=new JCheckBoxMenuItem3; group=new ButtonGroup(); for(int i=0;ib2.length;i+) b2i=new JCheckBoxMenuIte

40、m(外語學院系+(i+1); menub.add(b2i); b2i.addItemListener(new CheckBoxListener(); menuc=new JMenu(管理學院);c3=new JRadioButtonMenuItem3; for(int i=0;ic3.length;i+) c3i=new JRadioButtonMenuItem(管理學院系+(i+1);c3i.addItemListener(new RadioListener(); group.add(c3i);menuc.add(c3i);b.add(menua); b.add(menub); b.add(

41、menuc); /菜單條上添加菜單setJMenuBar(b);displayArea=new JTextArea(35,35);c.add(displayArea,BorderLayout.CENTER);setSize(200,200);setVisible(true);class CheckBoxListener implements ItemListener /定義復選菜單監(jiān)視器public void itemStateChanged(ItemEvent e)JMenuItem item=(JMenuItem)e.getSource();if(e.getStateChange()=e.

42、SELECTED) displayArea.append(item.getText()+n);class RadioListener implements ItemListener /定義單選菜單監(jiān)視器public void itemStateChanged(ItemEvent e)JMenuItem item=(JMenuItem)e.getSource();if(e.getStateChange()=e.SELECTED) displayArea.append(item.getText()+n);public static void main(String args)SimpleMenu

43、e=new SimpleMenu(); e.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 運行結(jié)果如圖9-10所示。圖9-10 運行結(jié)果 【說明】對菜單處理可以通過菜單項的類型不同而展開?!纠?-8】鼠標事件舉例。解題思路:將一個窗口的隱性層監(jiān)聽起來,那么在這個隱性層上所有鼠標操作都會觸發(fā)MouseEvent事件。代碼:程序SimpleMouse.javaimport java.awt.*;import javax.swing.*;import java.awt.event.*; public class SimpleMouse impleme

44、nts MouseListener JFrame a = new JFrame(鼠標事件演示窗口); Container contentPane = a.getContentPane(); JLabel label = new JLabel(初始狀態(tài),JLabel.CENTER); public void go() contentPane.addMouseListener(this); contentPane.add(label); a.setSize(250,200); a.setVisible(true); public void mousePressed(MouseEvent e) la

45、bel.setText(按下鼠標按鈕); public void mouseReleased(MouseEvent e) label.setText(釋放鼠標按鈕); public void mouseEntered(MouseEvent e) label.setText(鼠標光標進入按鈕); public void mouseExited(MouseEvent e) label.setText(鼠標光標離開按鈕); public void mouseClicked(MouseEvent e) label.setText(點擊鼠標); public static void main(Strin

46、g args) SimpleMouse b = new SimpleMouse(); b.go(); 運行結(jié)果如圖9-11所示。圖9-11 運行結(jié)果 【說明】本例程序來主要演示MouseListener監(jiān)聽器對鼠標事件處理的情況。9.5.1標簽9.5.2 按鈕9.5.3文本組件9.5.4 選擇組件9.5.5 組合框9.5.6列表框9.5.7菜單組件9.5.8工具欄9.5.9滾動面板9.5.10面板9.5.11案例29.5 常用Swing組件的使用 Swing組件類一般都是J開頭。這些組件配合布局管理可以組合出豐富多彩的圖形用戶界面。這些界面再加上事件處理,就構(gòu)成了完整的用戶界面的編程。標簽用于

47、在窗口界面上顯示一行提示性或說明性的文字。標簽只能顯示信息,不能用于輸入。JLabel類比較常用的方法有:String getText():獲取標簽上的文字。void setText(String text) :設(shè)置標簽顯示的文字為text。void setFont(Font f):設(shè)置標簽文字的字體。9.5.1標簽按鈕是圖形用戶界面中最常見的組件,用來控制程序運行的方向。用戶單擊按鈕時會產(chǎn)生ActionEvent事件,計算機將相應地執(zhí)行一系列命令完成一定功能。JButton類比較常用的方法有:void setText(String text):設(shè)置按鈕上的標識文字為text。String g

48、etText():獲得按鈕上的標識文字。9.5.2 按鈕1文本框是一個單行文本編輯框,用于接收用戶輸入的一行文字,也可以顯示一行文字。JTextField類比較常用的方法有:String getText():獲得文本框中的文本內(nèi)容。void setText(String text):設(shè)置文本框的文本內(nèi)容。 2文本區(qū)是一個多行文本編輯框,用于接收用戶輸入的多行文字,也可以顯示多行文字。當文本區(qū)的內(nèi)容裝滿時不會自動產(chǎn)生滾動條,需要將文本區(qū)組件添加到JScrollPane(滾動面板)上才能實現(xiàn)滾動條效果。JTextArea類具有JTextField類的相同方法,另外其比較常用的方法還有:String

49、 getSelected():獲取被選中的文本。void append(String text):在文本區(qū)尾部添加文本text。9.5.3文本組件1單選按鈕只有“選中”和“未選中”兩種狀態(tài),通常用一組單選按鈕實現(xiàn)“多選一”的功能。在java中必須使用按鈕組類(javax.swing.ButtonGroup)實現(xiàn)將多個單選按鈕位于同一組中。注意,ButtonGroup僅僅是一個邏輯分組,不是物理分組,在Palette組件板上并不存在該組件,因此需要自行定義ButtonGroup類的對象,并調(diào)用該類的add()方法將多個JRadioButton對象一一添加到ButtonGroup類對象中。JRad

50、ioBunon類比較常用的方法有:void setSelected(booleanb):設(shè)置一個單選按鈕的狀態(tài),b為true表明選中。9.5.4 選擇組件void setText(Stringtext):設(shè)置單選按鈕上顯示的文字。boolean isSelected():返回按鈕的狀態(tài),如果是選中的則返回 true,否則返回 false。2復選框也有“選中”和“未選中”兩種狀態(tài),通常用一組復選框提供一組選項供用戶選擇。與單選按鈕不同的是,在一組復選框中,可以同時選中多個復選框,也可以不選中任何一個復選框。JCheckBox類比較常用的方法基本上與JRadioButton類的相同。組合框是向用戶

51、提供多種選項的組件,其通常的顯示形式是右邊帶有下拉箭頭的文本框。可以在其文本框中輸人選項,也可以單擊下拉箭頭從顯示的列表中進行選擇。默認組合框是不能編輯的,需要通過setEditable(true)設(shè)為可編輯。JComboBox類比較常用的方法有:JComboBox():建立一個無選項的組合框。JComboBox(Object items):創(chuàng)建一個組合框,其中的選項由對象數(shù)組items決定。void addItem(Object object):通過字符串類或其他類為組合框添加選項。9.5.5 組合框int getSelectedIndex():獲取被選中項的序號,從0開始,沒有選中時值為-

52、1。Object getSelectedItem():獲得被選中項的內(nèi)容。列表框能夠容納并顯示一組選項,供用戶從中選擇一項或多項,但不能對其進行編輯。與文本區(qū)相似,列表框中的內(nèi)容增多時不會自動產(chǎn)生滾動條,也需要通過JScrollPane(滾動面板)才能實現(xiàn)滾動條效果。JList類比較常用的方法有:JList():創(chuàng)建一個沒有選項的列表框。JList(Vector vect):創(chuàng)建一個列表框,其中的選項由向量表vect決定。JList(Object items):創(chuàng)建一個列表框,其中的選項由對象數(shù)組items決定。9.5.6列表框void setSelectionMode(intselectio

53、nMode):設(shè)置列表框支持單選還是多選。void setVisibleRowCount(int visibleRowCount ):設(shè)置列表框中可顯示的行數(shù)。Object getSelectedValue():獲取被選中項的內(nèi)容。int getSelectedIndex(int i):獲取被選中項的序號,從0開始,沒有選中時值為-1。void setListData(Vector listData):設(shè)置列表框中的選項,參數(shù)是一個向量表 。 開發(fā)菜單時,需要使用到3個類:MenuBar類、Menu類和MenuItem類。可以通過setMenuBar方法將菜單放置在容器中的任何位置。9.5.7

54、菜單組件 工具欄按鈕一般對應著菜單中的某一項,便于用戶進行常用的操作。JToolBar提供了一個用來顯示常用的操作或控件的組件。對于大多數(shù)的外觀,用戶可以將工具欄拖到單獨的窗口中。9.5.8工具欄 滾動面板是一個帶滾動條的中間層容器,通常利用它為Swing組件中的文本區(qū)(JTextArea)、列表(JLIst)等組件添加滾動條。具體操作方法:先從Palette組件板上選取一個JScrollPane組件,在設(shè)計區(qū)上畫出適當大小的區(qū)域,然后再選取一個JTextArea或JLIst組件添加到該JScrollPane上,這樣文本區(qū)或列表框就會帶有滾動條了。9.5.9滾動面板 JPanel是個無邊框的中

55、間層容器,使用面板的目的是為了在窗口上分層次、分區(qū)域管理各種組件,適合比較復雜的GUI。一個窗口中可以添加多個JPanel對象,JPanel類的最常用的方法是add()方法和setLayout()方法,分別用于添加組件、設(shè)置面板布局。9.5.10面板解題思路:Swing包中的許多組件,如JCheckBox、JComboBox、JCheckBoxMenuItem,提供了“選中”和“未選”兩種狀態(tài)。希望對操作中產(chǎn)生的這兩種狀態(tài)能進行相應地處理屬于選項事件處理。與選項事件處理相關(guān)的有事件類ItemEvent和監(jiān)聽器接口ItemListener。代碼:SimpleRegister.javaimport

56、 java.awt.*;import javax.swing.*;import java.awt.event.*;public class SimpleRegister extends JFrame String information;JLabel gendarLabel,placeLabel,hobbyLabel;9.5.11案例2:設(shè)計一個簡單的興趣投票界面,實現(xiàn)基本信息的輸入JRadioButton radio1,radio2; /定義單選按鈕ButtonGroup group; /定義按鈕組String placeName=請選擇,廣州,北京,上海,杭州;JComboBox plac

57、eBox; /定義組合框String hobbyName=網(wǎng)購信息,旅游信息,新書信息,娛樂明星;JCheckBox hobbyBox; /定義復選框String gendar=,place=,hobby=;JButton confirmBtn,cancelBtn; /定義確定按鈕和取消按鈕public SimpleRegister() super(簡單投票頁面); Container container=getContentPane(); container.setLayout(new FlowLayout(); gendarLabel=new JLabel(性別); radio1=new

58、JRadioButton(男); radio2=new JRadioButton(女);radio1.addItemListener(new RadioListener(); /注冊選項監(jiān)聽器radio2.addItemListener(new RadioListener(); /注冊選項監(jiān)聽器 group=new ButtonGroup(); group.add(radio1); group.add(radio2); container.add(gendarLabel); container.add(radio1); container.add(radio2); placeLabel=new

59、 JLabel(所在地); placeBox=new JComboBox(placeName); placeBox.addItemListener(new ComboListener(); /注冊選項監(jiān)聽器 container.add(placeLabel); container.add(placeBox); hobbyLabel=new JLabel(關(guān)注); container.add(hobbyLabel); hobbyBox=new JCheckBoxhobbyName.length; for(int i=0;ihobbyName.length;i+) hobbyBoxi=new JC

60、heckBox(hobbyNamei); hobbyBoxi.addItemListener(new CheckBoxListener(); /注冊選項監(jiān)聽器 container.add(hobbyBoxi); confirmBtn=new JButton(確定); cancelBtn=new JButton(取消); confirmBtn.addActionListener(new NewActionListener(); /定義事件監(jiān)聽器 cancelBtn.addActionListener(new NewActionListener(); /定義事件監(jiān)聽器 container.add(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論