圖形用戶界面PPT優(yōu)秀課件_第1頁
圖形用戶界面PPT優(yōu)秀課件_第2頁
圖形用戶界面PPT優(yōu)秀課件_第3頁
圖形用戶界面PPT優(yōu)秀課件_第4頁
圖形用戶界面PPT優(yōu)秀課件_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、1 學習導讀學習導讀 首先,我們學習一些基本的圖形編程知識,首先,我們學習一些基本的圖形編程知識, 包括窗口的顯示及外觀設置、在窗口中顯示文包括窗口的顯示及外觀設置、在窗口中顯示文 字和圖像等;字和圖像等; 接下來,介紹接下來,介紹Java的事件處理機制,例如的事件處理機制,例如 如何在程序中接收并處理如鍵盤按鍵和鼠標點如何在程序中接收并處理如鍵盤按鍵和鼠標點 擊等擊等“事件事件”; 最后,系統(tǒng)地介紹圖形用戶界面中常用組最后,系統(tǒng)地介紹圖形用戶界面中常用組 件的用法,如布局管理器、文本框、復選框、件的用法,如布局管理器、文本框、復選框、 菜單、對話框等。菜單、對話框等。 第七章 圖形用戶界面的

2、設計與實現 2 教學重點與難點教學重點與難點: v框架的組成及外觀框架的組成及外觀 v在框架中顯示文本和圖形在框架中顯示文本和圖形 v字體和顏色的設置字體和顏色的設置 vJava的事件處理機制的事件處理機制 v窗口事件、焦點事件、鍵盤事件、鼠標事件窗口事件、焦點事件、鍵盤事件、鼠標事件 的處理的處理 vSwing各種組件的用法各種組件的用法 3 7.1 圖形用戶界面概述 Java1.0的出現帶來了抽象窗口工具箱(AWT)。設計目標是 希望構建一個通用的GUI,使得利用它編寫的程序能夠運行在 所有的平臺上,以實現Sun公司提出的口號“一次編寫,隨處 運行”。 在Java1.2中,Sun公司推出了

3、新的用戶界面庫:Swing。 相對AWT來說,Swing功能更強大、使用更方便,它的出現使 得Java的圖形用戶界面上了一個臺階。 但是,Swing并沒有代替AWT。在Java1.1中,AWT事件處 理模型有了根本改變。Swing使用的仍然是Java1.1的事件處理 模型。 4 7.2 簡單圖形用戶界面 7.2.1 第一個圖形用戶界面 在Java中,頂層窗口稱為框架。在AWT庫中,對應于框架 的類是Frame,在Swing庫中,相應的類是JFrame。JFrame類擴 展了Frame類。大部分AWT組件在Swing中都有等價的組件,它 們在表示形式上差一個“J”。 框架是一個容器,我們可以在這

4、個容器中放入其他一些圖 形用戶界面組件,如按鈕、菜單等,從而組成一個功能完善的 程序。 5 【例7.1】 顯示一個空框架 (例題7_1(1) import javax.swing.*; public class FirstFrame public static void main(String args) SimpleFrame frame = new SimpleFrame(); /設置用戶關閉框架時的響應動作 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /參見http:/ /顯示該框架 frame.show(); class

5、SimpleFrame extends JFrame public SimpleFrame() /設置框架大小 setSize(WIDTH, HEIGHT); public static final int WIDTH = 300; public static final int HEIGHT = 200; 運行結果 6 7.2.2 框架外觀 JFrame類的繼承層次圖 7 Component類是所有GUI對象的祖先,Window類是Frame 類的父類,JFrame類直接從Frame繼承而來。對于框架外觀的 操作比較重要的方法如下: vsetIconImage窗口最小化(在Java中稱為圖標

6、化) 時,把一個Image對象用作圖標。 vsetTitle設置窗口中標題欄的文字。 vsetResizable設置用戶是否可以改變框架大小。 vdispose方法關閉窗口,并回收該窗口的所有資源。 vsetLocation設置組件的位置。 vsetBounds重新設置組件的大小和位置。 8 【例7.2】 框架外觀的設置(例題7_1(2) 設置具有以下特征的框架: v它的高度和寬度為整個屏幕的1/3; v自定義窗口的標題和圖標; v窗口的大小不可變。 程序代碼見FrameSizeSet.java。運行結果如下: 圖標 標題 最大化按鈕 失效 9 7.2.3 在框架中顯示信息 JFrame包含了

7、四個窗格:RootPane、LayeredPane、 GlassPane和ContentPane。如果需要將一些圖形用戶界面元素加 入到框架中,我們需要在面板組件(JPanel)中進行繪制,然 后將該面板組件加入到框架的內容窗格(ContentPane)中。相 應的代碼如下: /得到JFrame的內容窗格對象 Container contentPane = getContentPane(); Component c = .; /如JButton、JLabel等組件 /將組件加入到內容窗格中 contentPane.add(c); 面板JPanel類本身是容器,它可以容納其他圖形用戶界面元 素,

8、如按鈕、菜單等。 10 為了在面板中進行繪制,需要重載JComponent類的 paintComponent方法。 class MyPanel extends Jpanel public void paintComponent(Graphics g) super.paintComponent(g); ./相關的繪制代碼 paintComponent方法是自動執(zhí)行的,當窗口需要被重新 繪制時,如用戶縮放窗口,或還原已最小化的窗口時,系統(tǒng) 就會自動調用該方法。 在框架中顯示文本信息的方法: g.drawString(text, x, y) 11 【例7.3】 在框架中顯示信息(例題7_1(3) 程

9、序代碼見HelloWorld .java。運行結果如下: 12 7.2.4 文本和字體 (例題7_1(3) 通過Font類對象設置字體。 Font StringFont = new Font (“宋體”, Font.ITALIC, 20 ); 字體風格有以下幾種選項: vFont.PLAIN/常規(guī) vFont.BOLD/加粗 vFont.ITALIC/傾斜 不同的系統(tǒng)中安裝了不同的字體,為了得到本系統(tǒng)中所有 已安裝的字體,我們可以通過GraphicsEnvironment類的 getAvailableFontFamilyNames方法來實現。該方法返回一個字 符串數組,數組內包含所有可用的字體

10、名。 【例7.4】顯示系統(tǒng)中所有字體名。程序見ListFonts.java 13 【例7.5】字體設置 (例題7_1(3) 采用“宋體”顯示字符串“你好,Java!”,字體風格為加 粗、傾斜,大小為20點。 程序代碼見FontSet.java。運行結果如下: 14 7.2.5 繪制簡單圖形 利用Graphics類提供的一些方法進行簡單圖形的繪制。如: drawLine、drawPolyLine、drawPolygon、drawArc。 drawLine用來畫線,調用格式: void drawLine(int x1, int y1, int x2, int y2) (x1, y1)和(x2, y

11、2)為線的兩個端點。 drawPolygon用來繪制多邊形,調用格式: void drawPolygon(Polygon p) 參數是多邊形對象Polygon ,先定義Polygon對象,然后將 點加入到該對象中,然后利用drawPolygon進行多邊形的繪制: Polygon p = new Polygon(); p.addPoint(x1, y1); p.addPoint(x2, y2); . g.drawPolygon(p); 15 【例7.6】簡單圖形的繪制(擴充例題7_1(3) 直線,弧,多邊形的繪制。 程序代碼見SimpleDraw.java。運行結果如下: 16 Java提供了矩

12、形、圓角矩形、橢圓等基本形狀的繪制方法: 矩形: void drawRect(int x, int y, int width, int height) 圓角矩形: void drawRoundRect(int x, int y, int width, int height, int arcWidth,int arcHeight) 橢圓: void drawOval(int x, int y, int width, int height) Java還提供了方便的填充封閉圖形的方法,只需要將前 面介紹的方法中的draw改為fill即可。如: void fillRect(int x, int y,

13、int width, int height) void fillRoundRect(int x, int y, int width, int height, int arcWidth,int arcHeight) void fillOval(int x, int y, int width, int height) 17 7.2.6 顏色 Graphics類提供了與顏色相關的方法: getColor返回當前顏色設置。 setColor設置當前顏色。 setColor方法的調用格式為: void setColor(Color c) 我們可以選用Color類提供的13種標準顏色的預定義常數, 也可以

14、采用Color構建器來創(chuàng)建Color對象: Color(int redness, int greenness, int blueness) 參數redness,greenness,blueness分別表示紅、綠、藍 的值,它們的值在0至255范圍內。以下是顏色使用的例子: g.setColor(Color.green); g.drawString(“你好!”, 100, 100); g.setColor(new Color(128, 0, 128);/自定義顏色 g.drawString(“你好!”, 100, 200); 18 JFrame類的超類Component類提供的顏色操作的相關方法

15、: setBackground設置背景色。 setForeground設置在組件上進行繪制的默認顏色。 【例7.7】 顏色設置(擴充例題7_1(3) 設置圖形顏色,將框架背景顏色設置為桌面的顏色。 程序代碼見ColorRect.java。運行結果如下: 19 7.2.7 圖像 通過Graphics類提供的drawImage方法實現圖像的顯示: public void paintComponent(Graphics g) . g.drawImage(image, x, y, null); 參數image封裝了要顯示的圖像文件。通過Toolkit類的靜態(tài) getDefaultToolkit方法,可

16、以讀取GIF文件和JPEG文件: String name = “test.gif”; Image image = Toolkit.getDefaultToolkit().getImage(name); 通過以上代碼,可以得到一個本地圖像文件,如果要在網 絡上得到一個圖像文件,必須使用URL類。相應的代碼如下: URL url = new URL(“http:/ Image image = Toolkit.getDefaultToolkit().getImage(url); 20 【例7.8】顯示圖像(7_1(3)Helloworld1 ) 從本地加載一幅圖像,并在窗口的中間顯示。 程序代碼見I

17、mageShow.java。運行結果如下: 21 7.3 事件處理 7.3.1 事件處理原理 如果用戶在用戶界面執(zhí)行了一個動作,這將導致一個事件 的發(fā)生。事件是描述發(fā)生了什么的對象。在Java中,定義了各 種不同類型的事件類,用來描述各種類型的用戶操作。 事件是由事件源產生的,事件的產生者稱為事件源。例如, 在Button組件上點擊鼠標會產生以這個Button為源的一個事件: ActionEvent。 事件源擁有自己的方法,我們通過向事件源注冊事件監(jiān)聽 器。事件監(jiān)聽器是一個類的實例,這個類實現了一個特殊的接 口,稱為Lintener interface。當事件源產生了一個事件以后,事 件源就會

18、發(fā)送通知給相應的事件監(jiān)聽器,監(jiān)聽器對象根據事件 對象內封裝的信息,決定如何響應這個事件。 22 7.3.4 AWT事件層次結構圖 AWT事件類的繼承關系圖 事件和接口名稱及事件方法 表7_2 1 2 適配器名稱辛運幃p117表8_2 23 AWT將事件分為兩類: 語義(語義(Semantic)事件)事件 ActionEvent:對應按鈕點擊、菜單選擇、列表框選擇、在文本域中 按回車鍵等。 AdjustmentEvent:用戶調整滾動條。 ItemEvent:用戶從一組選擇框或者列表項中進行選擇。 TextEvent:文本域或者文本框中的內容發(fā)生改變。 低級(低級(Low-Level)事件)事件

19、 ComponentEvent:組件大小改變、移動、顯示或者隱藏。 KeyEvent:鍵盤上的一個鍵被按下或者釋放。 MouseEvent:鼠標按鍵被按下、釋放、鼠標移動或者拖動。 FocusEvent:組件獲得焦點或者失去焦點。 WindowEvent:窗口被激活、屏蔽、最小化、最大化或關閉。 ContainerEvent:添加或者刪除一個組件。 24 1、通過Jbuilder自動產生事件響應: Jbuilder直接操作 它的原理是:建立一個實現actionListener的類A class Frame1_jButton1_actionAdapter implements ActionLis

20、tener public void actionPerformed(ActionEvent e) Frame1.jLabel1.setText(Button); 在另外一個建立界面的類B建立按鈕 jButton1.addActionListener(new Frame1_jButton1_actionAdapter(); 將按鈕增加到Jpanel或其他容器中 給按鈕注冊A. 2、通過直接實現接口的方法來響應事件 建立一個界面的類B同時實現接口 建立按鈕 將按鈕增加到Jpanel或其他容器中 給按鈕注冊B本身this. jButton1.addActionListener(this); 25 c

21、lass Frame1_extends JFrame implements ActionListener 建立一個容器 JButton b=new Jbutton(“B”); 建立一個JLabel 將按鈕JLabel增加到容器 b.addActionLisener(this); public void actionPerformed(ActionEvent e) jLabel1.setText(Button); 3、使用匿名的Adapter類 import java.awt.*; import java.awt.event.*; class Label1 extends Frame() pub

22、lic Label1() super(“Event Example.”); addWindowListener( new WindowAdapter( ) public void windowClosing(WindowEvent e) System.exit(0); ); 26 我們可以通過以下方法來注冊監(jiān)聽器對象: eventSourceObject.addEventListener(eventListenerObject); 以按鈕類為例: MyActionListener listener = .; JButton button = new JButton(”提交”); button.

23、addActionListener(listener); 監(jiān)聽器對象listener所屬的類MyActionListener必須實現相應 的接口,以響應事件: public class MyActionListener implements ActionListener . public void actionPerformed(ActionEvent event) /相應的響應操作 27 Java中事件處理的方法: 1、使用匿名的Adapter類 import java.awt.*; import java.awt.event.*; class Label1 extends Frame()

24、Public Label1() super(“Event Example.”); addWindowListener( new WindowAdapter( ) public void windowClosing(WindowEvent e) System.exit(0); ); 2、實現ActionListener接口 7_15Buttonclick 28 7.3.2 處理按鈕點擊事件 創(chuàng)建按鈕: JButton MyButton = new JButton(“Java”); 通過Container類的Add方法,將組件加入到該容器中。 class MyPanel extends JPane

25、l public MyPanel() JButton MyButton = new JButton(“Java”); add(MyButton); 為按鈕設置監(jiān)聽器。指定的監(jiān)聽器必須實現ActionListener 接口的actionPerformed方法: public void actionPerformed(ActionEvent event) 29 【例7.9】點擊按鈕 7_15Buttonclick 采用內部類ButtonAction充當事件監(jiān)聽器。 在面板中放置兩個按鈕,當用戶點擊其中一個按鈕時,面 板中顯示對應的操作。例如,如果點擊“按鈕一”,顯示“您 點擊的是:按鈕一” 。 程

26、序代碼見ButtonClick.java。運行結果如下: 30 7.3.3 捕獲窗口事件 JFrame對象是窗口事件(WindowEvent)的事件源,我們要指 定一個監(jiān)聽器對象: MyWindowListener listener = .; frame.addWindowListener(listener); 監(jiān)聽器對象要實現WindowListener接口。WindowListener接 口中共有七個方法,它們分別對應七個窗口事件: public interface WindowListener void windowOpened(WindowEvent e); void windowCl

27、osing(WindowEvent e); void windowClosed(WindowEvent e); void windowIconified(WindowEvent e); void windowDeiconified(WindowEvent e); void windowActivated(WindowEvent e); void windowDeactivated(WindowEvent e); 31 WindowListener接口實現方法一: 定義一個類來實現WindowListener接口,在感興趣的方法 中添加我們需要的代碼,然后讓其他方法為空即可。 class Qui

28、tWindow implements WindowListener public void windowClosing(WindowEvent e) System.exit(0); void windowOpened(WindowEvent e) void windowClosed(WindowEvent e) void windowIconified(WindowEvent e) void windowDeiconified(WindowEvent e) void windowActivated(WindowEvent e) void windowDeactivated(WindowEven

29、t e) 32 WindowListener接口實現方法二: Java為每個具有多個方法的AWT監(jiān)聽器接口提供了一個適 配器類。適配器類實現了監(jiān)聽器接口的所有方法,但是卻不做 任何實際工作。與WindowListener接口對應的WindowAdapter類 實現了以上七個空方法,我們只需要通過擴展適配器類來實現 我們感興趣的方法。 class QuitWindow extends WindowAdapter public void windowClosing(WindowEvent e) System.exit(0); 【例7.11】捕獲窗口事件 捕獲窗口的關閉事件。 程序代碼見Window

30、Closing.java。 33 7.3.5 焦點事件 如果某個組件能夠接收用戶按鍵,那么該組件就擁有焦點。 擁有焦點的組件在顯示形式上與其他組件有一些差別:文本域 內會顯示光標;按鈕四周會顯示一個由虛線組成的矩形框。 可以捕獲丟失的焦點事件來進行輸入的合法性檢查。如果 輸入不合法,通過調用requestFocus方法把焦點重新移回到該 文本域,提示用戶重新輸入: public void focusLost(FocusEvent event) /passText為需要進行合法性檢查的文本域 if(event.getComponent()=passText 34 7.3.6 鍵盤事件 KeyLi

31、stener接口中有三個方法: public void keyPressed(KeyEvent e) public void keyReleased(KeyEvent e) public void keyTyped(KeyEvent e) Java對于用戶按鍵的處理過程: 當前鍵盤狀態(tài)為小寫狀態(tài),要輸入一個大寫字母“A”,我 們的操作過程為:先按住Shift鍵不放,再按下A鍵,然后松開。 整個過程Java會產生五個事件: 按下Shift鍵:為VK_SHIFT調用keyPressed方法; 按下A鍵:為VK_A調用keyPressed方法; 鍵入字符“A”:為字符“A”調用keyTyped方法;

32、 松開A鍵:為VK_A調用keyReleased方法; 松開Shift鍵:為VK_SHIFT調用keyReleased方法。 35 【例7.12】捕獲鍵盤事件 用戶每次按下鍵盤上的某個鍵,程序捕獲鍵盤輸入,并顯 示在面板中,內容包括:虛擬鍵碼、鍵的名稱和字符。例如: 當前鍵盤狀態(tài)為小寫狀態(tài),用戶按下“A”鍵,顯示的值依次 為:65,A,a。 程序代碼見KeyPress.java。運行結果如下: 36 7.3.7 鼠標事件 vMouseListener接口 : mousePressed:鼠標鍵被按下時調用; mouseReleased:鼠標鍵被釋放時調用; mouseClicked:合并上述兩個

33、事件為一次鼠標點擊事件。 這三個方法的參數是MouseEvent,通過getX和getY方法, 能 夠 得 到 鼠 標 點 擊 時 的 鼠 標 指 針 的 x 和 y 坐 標 。 通 過 getClickCount方法,可以區(qū)別是單擊操作,還是雙擊操作。 vMouseMotionListener接口 : mouseMoved:鼠標移動; mouseDraged :用戶拖動鼠標。 v鼠標指針形狀的設置: setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR); 37 【例7.13】利用鼠標進行繪圖 點擊窗口中的空白處,得到一張“笑臉”的圖

34、像; 點擊已存在的圖像,圖像在“笑臉”和“哭臉”之間切換; 用鼠標可以對圖像進行拖動操作; 在窗口左上角,顯示當前鼠標光標的位置。 程序代碼見MouseDraw.java。運行結果如下: 38 7.4 Swing組件 7.4.1 Swing組件 的類繼承關系 39 7.4.2布局管理器 直接操作JBuilder查看各種布局管理器增加組件時的變化。 在Java中,提供了布局工具以支持用戶界面元素的自動定位。 容器中的所有組件都由一個布局管理器進行動態(tài)管理。 v流布局管理器流布局管理器 在一行上水平排列組件,直到該行沒有足夠的空間為止, 然后另起一行繼續(xù)排列。當用戶縮放容器時,布局管理器將進 行自

35、動控制,重新排列。我們可以指定流布局管理器的組件排 列方式,如居中(默認)、左對齊、右對齊等。如: setLayout(new FlowLayout(FlowLayout.LEFT); /左對齊 setLayout(new FlowLayout(FlowLayout.RIGHT); /右對齊 setLayout(new FlowLayout(FlowLayout.CENTER); /居中 40 v邊界布局管理器邊界布局管理器 邊界布局管理器的布局分為五個位置:CENTER、EAST、 WEST、NORTH、SOUTH,我們可以把組件放在這五個位置 的任意一個,如果未指定位置,則缺省的位置是CE

36、NTER。 采用邊界管理器進行布局時,四周的組件先被放置,剩余 的空間由位于中間的組件占用;當容器的大小改變時,四周組 件的厚度不會被改變,而中間組件的大小需要改變。 41 【例7.14】 流布局管理器示例 (嵌套面板例題7_1(4layout) 程序代碼見FlowLayoutTest.java。運行結果如下: java FlowLayoutTest 10 java FlowLayoutTest 15 42 【例7.15】邊界布局管理器示例 將三個按鈕置于南區(qū),而兩個文本置于北區(qū)。 程序代碼見BorderLayoutTest.java。運行結果如下: 43 7.4.3 文本組件 Java提供的

37、文本組件:用于單行文本輸入的文本域 (JTextField)和用于多行輸入的文本區(qū)(JTextArea)。 v獲得文本域的內容獲得文本域的內容 add1 = Integer.parseInt(originText.getText().trim(); v跟蹤文本域內容的修改跟蹤文本域內容的修改 /新建文檔監(jiān)聽器 DocumentListener resultListener = new ResultListener(); . /為第一個文本域安裝一個文檔監(jiān)聽器 originText.getDocument().addDocumentListener(resultListen er); 當文本發(fā)生

38、改變后,下面三個方法之一會被調用: void insertUpdate(DocumentEvent e) void removeUpdate(DocumentEvent e) void changedUpdate(DocumentEvent e) 44 v重新設置文本域的內容重新設置文本域的內容 resultText.setText(s); 【例7.16】獲取兩個文本域的輸入并求和,然后顯示在第 三個文本域中。 程序代碼見TextFieldTest.java。運行結果如下: 初始狀態(tài)改變輸入 45 v密碼域密碼域JPassworkFieldJPassworkField 特殊的文本域,在密碼域中

39、輸入時,用戶的輸入并不會真 正顯示出來,而是顯示回顯符,如“*”,以防止被他人看見 用戶輸入的密碼。 【例7.17】將密碼域的輸入顯示在文本域中 程序代碼見PasswordFieldTest.java。運行結果如下: 46 v文本區(qū)組件文本區(qū)組件 在一個文本區(qū)里,用戶可以輸入多行文本,多行文本之間 的換行可以采用三種方式: 1)手動換行。即輸入ENTER鍵,這將在文本中插入換行符 “n”。 2)通過設置換行屬性來避免手動換行,由文本區(qū)組件自動處 理。 textArea.setLineWrap(true); 但是這樣的設置并沒有真正在文本中插入換行符“n”。 3)給文本區(qū)增加滾動條,這可以通過把

40、文本區(qū)插入到一個滾 動窗格中來實現。這也是給其他組件添加滾動條的方法。 JScrollPane scrollPane = new JScrollPane(textArea); 47 【例7.18】文本區(qū)的三種顯示方式 程序代碼見TextAreaTest.java。運行結果如下: 48 7.4.4 標簽 讓我們回頭看看前面的示例結果,我們必須記住組件的位 置,否則無法分辨出各個組件。對于程序編制者,這還可以解 決,但是對于一般用戶,就相當困難了。因此,為了在運行時 能夠識別組件,我們需要標簽組件。 JLable label = new JLabel(“NoWrapArea”, JLabel.LE

41、FT); 通過上面的代碼我們建立了一個標簽對象,其顯示的文本 是“NoWrapArea”,對齊方式為左對齊。 49 7.4.5 按鈕 為在按鈕上顯示相應的信息,可以提供初始的文本和圖標。 loginButton = new JButton(登錄, new ImageIcon(login.gif); 當希望按鈕對單擊動作有所反應時,我們需要為按鈕注冊 一個事件監(jiān)聽器,并且實現這個事件監(jiān)聽器,就可以完成所需 要的按鈕功能。 /注冊事件監(jiān)聽器 loginButton.addActionListener(new LoginAction(); /實現事件監(jiān)聽器 private class LoginAc

42、tion implements ActionListener 50 【例7.19】密碼驗證示例 當用戶輸入密碼后,按下“登錄”按鈕,然后我們將密碼 輸入是否正確的結果顯示在文本域中。 程序代碼見Login.java。運行結果如下: 51 7.4.6 Swing常用的選擇類組件 v單選按鈕組件單選按鈕組件 單選按鈕組件是一組互斥按鈕,即我們一次只能選擇其中 的一個選項,選項的選取只需要單擊即可。 ButtonGroup group = new ButtonGroup(); JRadioButton button1 = new JRadioButton(“EAST”, true); . JRadi

43、oButton button4 = new JRadioButton(“NORTH”, false); 為指定單選按鈕的初始選項,我們在新建JRadioButton對象 時,將其構造器的第二個參數設置為“true”;同時,其他按 鈕對象的第二個參數被設置為“false”。 52 【例7.20】單選按鈕組件示例 通過選擇單選按鈕中的選項來設置標簽組件的內容,由標 簽組件顯示我們的選擇。 程序代碼見RadioButtonExample.java。運行結果如下: 53 v復選框組件復選框組件 復選框組件可以進行多重選擇,即我們能夠選擇其中的多 個選項,如果要取消或選取某選項,可以單擊此選項。 和單選

44、按鈕不同,復選框允許用戶選擇多個選項。我們通 過單擊復選框來選取該選項,再單擊一下,則取消選取。建立 復選框組件對象需要使用標簽來表明該復選框的含義,標簽在 復選框構造器里進行設置;對復選框是否被選取可以通過 isSelected方法進行狀態(tài)判斷。 boldCheck = new JCheckBox(“Bold”); /新建復選框。 italicCheck = new JCheckBox(“Italic”); /新建復選框。 boldCheck.isSelected(); /判斷“mathCheck”復選框是否被選定。 54 【例7.21】復選框組件示例 選擇字體風格。 程序代碼見CheckB

45、oxExample.java。運行結果如下: 55 v列表框組件列表框組件 列表框組件允許用戶從一個列表中選擇一個或多個條目。 用戶可以從列表框中選擇一個或多個條目。 建立列表框前,需要指定所顯示的列表條目: String courses = “Math”, “English”, “Physics”, “Chemic”, “Biology”, “Politics”; JList courseList = new JList(courses); 如果列表框比較長,而顯示屏幕比較小,可以設置列表中 顯示的行數,同時使用滾動條: courseList.setVisibleRowCount(4); J

46、ScrollPane listScrollPane = new JScrollPane(courseList); 選擇列表框中的多個條目有兩種方式: 連續(xù)條目選擇和間斷條目選擇。 56 用戶選擇列表框條目時,列表框就會產生選擇事件。將列 表選擇監(jiān)聽器ListSelectionListener添加給列表組件,并在該監(jiān) 聽器中實現valueChanged方法: courseList.addListSelectionListener(new courseListener(); . private class courseListener implements ListSelectionListene

47、r public void valueChanged(ListSelectionEvent event) . 獲得用戶所選擇的列表框條目以及條目所在的索引號需要 使用getSelectedValues方法和getSelectedIndices方法: Object selectedCourses = courseList.getSelectedValues(); intselectedIndexCourses=courseList.getSelectedIndices(); 57 【例7.22】列表框組件示例 在給定的科目中選擇多門課程。 程序代碼見ListExample.java。運行結果如下

48、: 58 v組合框組件組合框組件 組合框將編輯框和下拉列表框結合起來,使得用戶可以在 一組預定義的選項中選擇一個條目,而且能夠修改選項內容。 新建一個有內容的組合框既可以象列表框那樣指定數組, 也可以采用向組合框對象里加入條目的方法。對組合框是否能 夠被編輯也可以進行設置。 /新建組合框。 jobsBox = new JComboBox(); jobsBox.setEditable(true); /設置組合框是否能夠被編輯。 jobsBox.addItem(job1); jobsBox.addItem(job2); 59 組合框的內容是可以動態(tài)變化的: addItem方法能夠把條目添加到列表的

49、末尾; insertItermAt方法將把新條目添加到列表的任何位置; removeItem方法和removeItemAt方法將能夠刪除指定條目; removeAllItems方法將刪除所有條目: jobsBox.insertItermAt(“job7”, 6); /在第7個位置增加“job7” 條目。 jobsBox.removeItem(“job7”); /刪除“job7”條目。 jobsBox.removeItemAt(5); /刪除第6個條目,即“job6”。 jobsBox.removeAllItems(); /刪除所有條目。 60 當選擇一個條目時,組合框就產生一個事件,對事件的監(jiān)

50、 聽需要添加事件監(jiān)聽器,并實現actionPerformed方法: /增加事件監(jiān)聽器。 jobsBox.addActionListener(new jobsListener(); . private class jobsListener implements ActionListener public void actionPerformed(ActionEvent event) . 當組合框的選擇事件發(fā)生時,可以通過getSelectedItem方 法來獲取當前被選擇的條目: Object selectedJob = jobsBox.getSelectedItem(); 61 【例7.23】

51、組合框組件示例 應用組合框來進行選擇職業(yè)。 程序代碼見ComboBoxExample.java。運行結果如下: 62 v滑塊組件滑塊組件 滑塊組件一般有一個連續(xù)區(qū)間和可拖動的滑塊,用戶可以 通過拖動滑塊在一個區(qū)間范圍里進行選擇。 JSlider ageSlider = new JSlider(); ageSlider = new JSlider(SwingConstants.VERTICAL,0,120,20); 當 滑 塊 被 拖 動 時 , 滑 塊 的 值 將 發(fā) 生 變 化 , 觸 發(fā) C h a n g e E v e n t 事 件 。 滑 塊 組 件 的 事 件 監(jiān) 聽 器 要 實

52、 現 ChangeListener接口,并實現此接口中的stateChanged方法: AgeListener myAgeListener = new AgeListener(); ageSlider.addChangeListener(myAgeListener); private class AgeListener implements ChangeListener public void stateChanged(ChangeEvent event) . 滑塊值發(fā)生變化時,使用getValue方法來獲得滑塊值: myTextField.setText( + sourceSlider.ge

53、tValue(); 63 【例7.24】滑塊組件示例 在進行年齡輸入時,使用滑塊進行直觀的選擇。 程序代碼見SliderExample.java。運行結果如下: 64 7.4.7 邊界 當界面中的組件比較多時,需要從視覺上將組件分隔。通 用的辦法是為面板設置邊界,并將需要分隔的組件添加到該面 板中。 可選的邊界風格包括:低斜面、凸斜面、蝕刻、直線、不 光滑、空。 創(chuàng)建邊界需要調用BorderFactory的靜態(tài)方法。當需要給邊 界 增 加 標 題 以 提 示 時 , 可 以 使 用 B o r d e r F a c t o r y 的 createTitledBorder方法: /初始化帶標

54、題的空邊界。 Border border = BorderFactory.createEmptyBorder(); Border titled = BorderFactory.createTitledBorder (border, Border types); 當創(chuàng)建好需要的邊界后,就可以把邊界對象添加到組件中: buttonPanel.setBorder(titled); 65 【例7.25】邊界示例 各種邊界的不同效果。 程序代碼見BorderExample.java。運行結果如下: 66 7.4.8菜單以及彈出式菜單 典型的菜單: 67 v創(chuàng)建菜單創(chuàng)建菜單 四個步驟:創(chuàng)建菜單欄、創(chuàng)建菜單

55、以及子菜單、創(chuàng)建菜單 項,并將菜單項加入到子菜單或菜單中,將子菜單加入到菜單 中,將菜單加入到菜單欄中。 /(a)創(chuàng)建菜單欄,并將菜單欄加入到框架中。 JMenuBar menuBar = new JMenuBar(); setJMenuBar(menuBar); /(b)創(chuàng)建“File”菜單、“Edit”菜單和“View”菜單。 JMenu fileMenu = new JMenu(File); JMenu editMenu = new JMenu(Edit); JMenu viewMenu = new JMenu(View); /(b)創(chuàng)建子菜單。 JMenu optionMenu = n

56、ew JMenu(Option); 68 /(c)通過Action對象新建“New”菜單項,并添加事件監(jiān)聽器。 newItem = fileMenu.add(new ShowAction(New); /(c)通過指定菜單項對象新建“Paste”菜單項。 pasteItem = new JMenuItem(Paste, P); /(d)將菜單項加入到子菜單或菜單中,將子菜單加入到菜單中,將菜單加 入到菜單欄中。 fileMenu.add(newItem); editMenu.add(pasteItem); viewMenu.add(optionMenu); menuBar.add(fileMen

57、u); menuBar.add(editMenu); menuBar.add(viewMenu); 69 v創(chuàng)建復選框和單選按鈕菜單項創(chuàng)建復選框和單選按鈕菜單項 和創(chuàng)建一般的菜單項幾乎一樣,只需要注意一下復選框和 單選按鈕的不同構造函數以及單選按鈕組的構建: /創(chuàng)建單選按鈕菜單項“Forward”,并將“Forward”菜單項加入到 “Search”菜單中。 ButtonGroup group = new ButtonGroup(); forwardItem = new JRadioButtonMenuItem(Forward); group.add(forwardItem); searchMen

溫馨提示

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

評論

0/150

提交評論