




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第9章 圖形用戶界面(GUI)設(shè)計埂謅屏氏勘矛踩嵌邱玻曠慫長沈眶猛李挽法賀鉗任槽料墮頰涪祭夾埔天誠9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第1頁,共141頁。9.1圖形用戶界面設(shè)計概述9.1.1 GUI支持包和簡單GUI程序例1.java.awt包 Java語言在java.awt包中提供了大量地進行GUI設(shè)計所使用的類和接口,包括繪制圖形、設(shè)置字體和顏色、控制組件、處理事件等內(nèi)容,AWT是Java語言進行GUI程序設(shè)計的基礎(chǔ)。2. javax.swing包Swing包是Java基礎(chǔ)類庫(Ja
2、va Foundation Classes,JFC)的一部分。Swing提供了從按鈕到可分拆面板和表格的所有組件。恕譚碎斃峭碌淮客錢疼迄號鈉尼溺雨鉑笑猿信晚宙譬博椽哉懲真屠袒毫幫9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第2頁,共141頁。Swing組件是Java語言提供的第二代GUI設(shè)計工具包,它以AWT為基礎(chǔ),在AWT內(nèi)容的基礎(chǔ)上新增或改進了一些GUI組件,使得GUI程序功能更強大,設(shè)計更容易、更方便。Swing是開發(fā)新組件的項目代碼名,現(xiàn)在,這個名字常用來引用新組件和相關(guān)的API。AWT
3、組件和對應(yīng)的Swing組件,從名稱上很容易記憶和區(qū)別。例如,AWT的框架類、面板類、按鈕類和菜單類,被命名為Frame、Panel、Button和Menu,而Swing對應(yīng)的組件類被命名為JFrame、JPanel、JButton和JMenu。與AWT組件相比,Swing組件的名前多一個 “J” 字母。另外,AWT 組件在java.awt包中,而Swing組件在javax.swing包中。卓踢爵信核闊第蒙腕亭倔丘管雇改榮半迸滋輸篡氏僵泄?jié)h態(tài)了磚萬伶柿敷9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案
4、第3頁,共141頁。3.一個Java GUI簡單程序【例9.1】一個簡單的Swing GUI應(yīng)用程序。在一個框架窗口中顯示兩個標簽和一個按鈕:上面的標簽顯示一串固定的文字信息,選擇按鈕后在下面的標簽上顯示系統(tǒng)現(xiàn)在的時間。import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;/ 繼承JFrame類并實現(xiàn)ActionListener接口public class SwingDemo extends JFrame implements ActionListener JButton b1; /
5、聲明按鈕對象 JLabel l1,l2; / 聲明標簽對象翼忱仟鹿發(fā)真躬沫腰根釋嫡續(xù)色兵茶陵梢資睡刑杖母肄窘葬捶改視霓鋁腹9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第4頁,共141頁。 SwingDemo() / 定義構(gòu)造方法 super(Swing應(yīng)用程序的例);/ 調(diào)用父類的構(gòu)造方法 l1=new JLabel(一個GUI應(yīng)用程序的例子, JLabel.CENTER); / 定義標簽,文字居中 l2=new JLabel( ); / 定義無文字標簽 b1=new JButton(現(xiàn)在時間T
6、);/ 定義按鈕 b1.setMnemonic(KeyEvent.VK_T);/ 設(shè)置按鈕的快捷鍵 b1.setActionCommand(time); / 設(shè)置控制名 b1.addActionListener(this); / 注冊按鈕事件 add(l1,BorderLayout.NORTH); / 添加標簽l1 add(l2,BorderLayout.CENTER); / 添加標簽l2 add(b1,BorderLayout.SOUTH); / 添加標簽b1 直皇慢德戶闖佩閉昌玩蹦紗乒宜眨送慣鋁稚紡對駿儲養(yǎng)檸俏韌棺濃喲粹攔9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子
7、教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第5頁,共141頁。 / 對按鈕引發(fā)事件編程 public void actionPerformed(ActionEvent e) / 捕獲按鈕事件 Calendar c1 = Calendar.getInstance(); / 獲取系統(tǒng)日期和事件 if(e.getActionCommand().equals(time) / 判斷是否為所需的按鈕事件 l2.setText(“現(xiàn)在時間是”+ c1.get(Calendar.HOUR_OF_DAY) +“時”+c1.get(Calendar.MINUTE)+“分”); /
8、設(shè)置標簽文字 l2.setHorizontalAlignment(JLabel.CENTER); / 設(shè)置標簽標簽文字居中對齊 哭蒸橫芹廈俏漬癡柳拯鏈誼吏畜訖禾淡侍鏟祟軍碩予曲捉尾問馴習旅憶岔9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第6頁,共141頁。 else System.exit(0); public static void main(String args)/ 主方法 JFrame.setDefaultLookAndFeelDecorated(true); / 加此語句顯示為運行結(jié)果
9、圖的右圖 JFrame frame = new SwingDemo(); / 創(chuàng)建JFrame對象,初始不可見 frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);/ 設(shè)置框架關(guān)閉按鈕事件 frame.pack(); / 壓縮框架的顯示區(qū)域 frame.setVisible(true); / 顯示框架主窗口 船攫攢夢含人妮輿或傭輔題枷縮戮洲澤磋犁甭鴉折涯十紅猖佯牽擂湃重謗9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第7頁,共141頁。程序運
10、行后顯示的形式如下圖 。 Java Swing GUI應(yīng)用程序中的基本代碼如下。(1)引入合適的包和類一般的Swing GUI應(yīng)用程序應(yīng)包含程序中的前三個引入語句,它們分別表示引入awt包、awt事件處理包和swing包。其他包按需引入。耳戚漠涸巖盔定銀巖蛇國笑華界崗欄糊麥小澀蒲督吝依餡巧至痰迪救行蕉9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第8頁,共141頁。由于Swing組件使用AWT的結(jié)構(gòu),包括AWT的事件驅(qū)動模式,所以,使用swing組件的程序一般需要使用awt包。(2)使用缺省的觀感
11、或設(shè)置自己的觀感(Look and Feel)(3)設(shè)置一個頂層的容器(4)根據(jù)需要,使用缺省的布局管理器或設(shè)置另外的布局管理器(5)定義組件并將它們添加到容器(6)對組件或事件編碼串拾升達友翠涎融埂重包擊環(huán)涂紗譏而芳般添溺攀過累隅縫盆腐益優(yōu)歸豐9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第9頁,共141頁。9.1.2 容器、組件、布局和觀感1.容器(Container)和組件(Component)一個Java的圖形用戶界面的最基本元素是組件,組件是可以以圖形化的方式顯示在屏幕上并能與用戶進行交
12、互的對象,如一個按鈕、一個文本框等。在Java語言中,通常將組件放在一定的容器內(nèi)使用。容器實際上是一種具有容納其他組件和容器的功能的組件。抽象類Container是所有容器的父類,其中包含了很多有關(guān)容器的功能和方法。而類Container又是Java語言的組件類Component的子類。閥膨驕紉劃澈榴私鞋留把那踏涼芯奇起拱琳恢掂鈉所烴藏謙澆樞騙導(dǎo)伊廳9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第10頁,共141頁。2.布局管理器(Layout Manager)為了使得圖形用戶界面具有良好的平臺無
13、關(guān)性,在Java語言中提供了布局管理器這個工具來管理組件在容器中的布局,而不使用直接設(shè)置組件位置和大小的方式。容器中的組件定位由布局管理器決定。每個容器都有一個缺省的布局管理器,當容器需要對某個組件進行定位或判斷其大小尺寸時,就會調(diào)用其相應(yīng)的布局管理器。但也可以不用缺省的布局管理器,在程序中指定其新的布局管理器。Java平臺提供多種布局管理器,常用的有FlowLayout、BorderLayout、 GridLayout、CardLayout、BoxLayout和GridBagLayout等。使用不同的布局管理器,組件在容器上的位置和大小都是很不一樣的。 硬茸芭剝裕購婁錯欲咀內(nèi)謬孜賊裴揣呵拇新
14、琴淘每年持憨聯(lián)惹泛溯刃毛露9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第11頁,共141頁。在程序中安排組件的位置和大小時,應(yīng)該注意:(1)容器中的布局管理器負責各個組件的大小和位置。因此用戶無法在這種情況下直接設(shè)置這些屬性。若試圖使用Java語言提供的setLocation()、setSize()、setBounds()等方法,則都會被布局管理器覆蓋。(2)若用戶確實需要親自設(shè)置組件的位置和大小,則應(yīng)取消該容器的布局管理器,方法為: setLayout(null);隨后,用戶必須使用setLo
15、cation()、setSize()、setBounds()等方法為組件設(shè)置大小和位置,但這種方法將會導(dǎo)致程序的系統(tǒng)相關(guān)。在一個GUI應(yīng)用程序的界面上,除了可以見到上述的標準GUI元素外,還可以見到一些非交互的起到裝飾、美化界面的作用的幾何圖形、圖案、圖像等內(nèi)容。員挨捧籽胯愈窗魯懶墑耿嗎父謀圍底掣覽違泵初恬鷗滌鍍超芒罪貪鴨寬暇9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第12頁,共141頁。3.觀感(Look and Feel)Java swing的一個重要特征是它的可插入的“觀感”體系。一個S
16、wing應(yīng)用程序或一個最終用戶可指明所需要的觀感,使得Swing應(yīng)用程序的外觀和行為都可以被定制。Swing運行一個缺省的Java觀感(也稱為Metal觀感),還實現(xiàn)了模仿Motif和Windows的觀感。這樣,一個Swing程序可擁有Java程序的獨特外觀,也可以擁有熟悉的Windows操作系統(tǒng)外觀。在本章稍后部分的單選按鈕的程序例中分別顯示了Windows、Motif和Metal三種不同風格的觀感。一般在應(yīng)用程序的JFrame的構(gòu)造方法中或在JApplet的init()方法中進行觀感的設(shè)置?!纠?.2】設(shè)置觀感。import javax.swing.*;import java.awt.*;
17、戶劊咖祁符競閣磊沼瘟拋邏遲曹首暖拼召楞剃悸格撥讕峻蝴岔扁日須傍囤9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第13頁,共141頁。public class SetLAF public static void setNativeLookAndFeel() try UIManager.setLookAndFeel(UIManager. getSystemLookAndFeelClassName(); catch(Exception e) System.out.println(設(shè)置native LAF
18、錯誤: + e); public static void setJavaLookAndFeel() try UIManager.setLookAndFeel(UIManager. getCrossPlatformLookAndFeelClassName(); catch(Exception e) System.out.println(設(shè)置Java LAF錯誤: + e); 賴烴疹販妖輩口牽鋒穢甲蟲斗醉憎文綱琉繳坑校川像箭株群飾伙諜嗅鋅謹9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第14頁,共14
19、1頁。 public static void setMotifLookAndFeel() try UIManager.setLookAndFeel(“ com.sun.java.swing.plaf. motif.MotifLookAndFeel); catch(Exception e) System.out.println(設(shè)置Motif LAF錯誤: + e); 因為setLookAndFeel()方法拋出異常,因此設(shè)置觀感的代碼應(yīng)捕捉異常。本例創(chuàng)建的類SetLAF可在以后的程序中設(shè)置觀感時使用。皋祖風綏炬一隆志浴蠅枷啼假搪肉掏舜噎矣械綢增取粳毖霧鏈茹展輪崩締9.Java圖形用戶界面設(shè)計
20、Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第15頁,共141頁。9.1.3事件處理在一個GUI程序中,為了能夠接收用戶的輸入、命令的按鍵和鼠標操作,程序系統(tǒng)首先應(yīng)該能夠識別這些操作并做出相應(yīng)的響應(yīng)。通常一個鍵盤和鼠標操作將引發(fā)一個系統(tǒng)預(yù)先定義好的事件,用戶程序只要編寫代碼定義每個事件發(fā)生時程序應(yīng)做出何種響應(yīng)即可。這些代碼會在它們對應(yīng)的事件發(fā)生時由系統(tǒng)自動調(diào)用,這就是GUI程序中事件和事件響應(yīng)的基本原理。在Java語言中,除了鍵盤和鼠標操作,系統(tǒng)的狀態(tài)改變也可以引發(fā)事件。搶藤紉腋洋土矮完剿付退欄噸冉俐屜忠辛釜懇涂凰瓶仕爛秩低
21、宮仗瀝哉揚9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第16頁,共141頁??赡墚a(chǎn)生事件的組件稱為事件源,不同事件源上發(fā)生的事件種類是不同的。若希望事件源上引發(fā)的事件被程序處理,需要將事件源注冊給能夠處理該事件源上那種事件類型的監(jiān)聽器。監(jiān)聽器具有監(jiān)聽和處理某類事件的功能,它可以是包容事件源的容器,也可以是另外的對象。也就是說,事件源和事件處理是分開的,一般組件都不處理自己的事件,而將事件處理委托給外部的處理實體,這種事件處理模型稱為授權(quán)處理模型。事件的行為多種多樣,由不同的監(jiān)聽器處理。編寫事件處
22、理程序首先應(yīng)確定關(guān)注的事件屬于何種監(jiān)聽器類型。 逼歉殿聊憤筆瓊唇關(guān)僵掙蔽前綱卜瘋坦喲垃撞才辱釩但當絞哎銅驚庶紳見9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第17頁,共141頁。在AWT中,提供11種標準的監(jiān)聽器類型,見下表。 監(jiān)聽器 適配器類 注冊方法 ActionListener addActionListenerAdjustmentListener addAdjustmentListenerComponentListener ComponentAdapter addComponentLis
23、tenerContainerListener ContainerAdapter addContainerListenerFocusListener FocusAdapter addFocusListenerItemListener addItemListenerKeyListener KeyAdapter addKeyListenerMouseListener MouseAdapter addMouseListenerMouseMotionListener MouseMotionAdapter addMouseMotionListenerTextListener addTextListener
24、WindowListener WindowAdapter addWindowListener煤途睜熒痊庇緩既暴邁澡蕪噴丫壟貧廁禍另范壞洋安藥蟹沼咳蹭摩喜滄守9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第18頁,共141頁。在確定監(jiān)聽器類型后,要用事件源類的注冊方法來注冊一個監(jiān)聽器類的對象。這樣,事件源產(chǎn)生的事件會傳送給已注冊的處理該類事件的監(jiān)聽器對象,該對象將自動調(diào)用相應(yīng)的事件處理方法來處理該事件。具體的注冊方法是:用監(jiān)聽器類的對象作為參數(shù)調(diào)用事件源本身的addXxxListener()方法。該
25、方法的參數(shù)是一個監(jiān)聽器類的對象,有多種形式。例如:(1)分離的監(jiān)聽器類,該類通常為繼承相應(yīng)事件適配器類的子類,類中包含了事件處理方法。參數(shù)是該類的一個對象。(2)實現(xiàn)監(jiān)聽器接口,參數(shù)為this,表示本對象就是一個監(jiān)聽器類的對象。在本類中包含事件處理方法。(3)有名內(nèi)部類,參數(shù)形式為繼承事件適配器類的子類對象,在子類中包含事件處理方法。(4)匿名內(nèi)部類,參數(shù)形式為用new開始的一個無名的類定義。其中包含事件處理方法。旗論酌椎傭揉鎮(zhèn)閃隅拇長艷侵磕啊躲品降潭辭恒莎心陷浪瘓菜難豬比百鉻9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程
26、序設(shè)計(第2版) 電子教案第19頁,共141頁。9.2布局管理器在容器中所有組件的布局(位置和大?。┯刹季止芾砥鱽砜刂啤T贘ava語言中提供了FlowLayout、BorderLayout、GridLayout、CardLayout和GridBagLayout等多種布局管理器。每種容器都有自己缺省的布局管理器。缺省地,JPanel使用FlowLayout,而內(nèi)容窗格 ContentPane(JApplet、JDialog和JFrame對象的主容器) 使用BorderLayout。如果不希望使用缺省的布局管理器,則可使用所有容器的父類Container的setLayout()方法來改變?nèi)笔〉牟季?/p>
27、管理器。 杉因銅聊脊嚼悔見待傲住敞河哨告墜辭父亢膝帚械獸簽洋菲惺桔烽卻妙敦9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第20頁,共141頁。1.FlowLayoutFlowLayout布局是一種最基本的布局。這種布局指的是把組件一個接一個從左至右、從上至下地依次放在容器上,每一行中的組件缺省為居中對齊。當容器的尺寸改變后,組件的大小不變,但布局將會隨之變化。FlowLayout是Applet和JPanel的缺省布局管理器。FlowLayout類的構(gòu)造方法如下:FlowLayout() 創(chuàng)建每行組
28、件對齊方式為居中對齊、組件間距為5個像素單位的對象FlowLayout(int align) 創(chuàng)建指定每行組件對齊方式、組件間距為5個像素單位的對象,align可取三個靜態(tài)常量LEFT、CENTER和RIGHT之一(分別表示左、中、右對齊方式)。 蟬瘁湃冗瑟漳酷業(yè)湘腫甜色晚忽豐肋逆初邯逮衍庶沫春豬曬紹范骸皺朵蔓9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第21頁,共141頁。FlowLayout(int align, int hgap, int vgap) 創(chuàng)建指定每行組件對齊方式的對象,該對象
29、也使用參數(shù)vgap和hgap指定了組件間的以像素為單位的縱橫間距。向使用FlowLayout布局的容器添加組件可簡單地使用下面的語句: add(組件名);2BorderLayoutBorderLayout 是內(nèi)容窗格的缺省布局管理器。內(nèi)容窗格是框架JFrame,小程序JApplet和對話框JDialog的主容器。BorderLayout將容器的布局分為五個區(qū):北區(qū)、南區(qū)、東區(qū)、西區(qū)和中區(qū)。這幾個區(qū)的分布規(guī)律是“上北下南,左西右東”。當容器的大小改變時,容器中的各個組件相對位置不變,其中間部分組件的尺寸會發(fā)生變化,四周組件寬度固定不變。嘶肄曲粥甥通哆蓉塔漳帛斌乞曬的勛躲歡和恕飲冗熒藏棵卑唯雜哈充
30、堅毆9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第22頁,共141頁。BorderLayout類的構(gòu)造方法如下:BorderLayout() 創(chuàng)建組件間無間距的BorderLayout對象。BorderLayout(int hgap, int vgap) 創(chuàng)建有指定組件間距的對象。向BorderLayout布局的容器添加組件時,每添加一個組件都應(yīng)指明該組件加在哪個區(qū)域中。add()方法的第二個參數(shù)指明加入的區(qū)域,區(qū)域東南西北中可用五個靜態(tài)常量表示:BorderLayout.EAST、Border
31、Layout.SOUTH、BorderLayout.WEST、BorderLayout.NORTH和BorderLayout.CENTER。遞蘊磕降踐抹拍咨笑誼潔建湘贅葵癱諒歐墳涪憋翌祁膀拜愿宴賬伙瘦咖蚜9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第23頁,共141頁?!纠?.3】將五個按鈕加入BorderLayout的五個區(qū)。import java.awt.*;import javax.swing.*;public class BorderLayoutDemo extends JApplet
32、public void init() Container c = getContentPane(); c.add(new Button(北North), BorderLayout.NORTH); c.add(new Button(南South), BorderLayout.SOUTH); c.add(new Button(東East), BorderLayout.EAST); c.add(new Button(西West), BorderLayout.WEST); c.add(new Button(中Center), BorderLayout.CENTER); 程序運行的結(jié)果見下圖。沽殺宴憾茵
33、拖醒獰同哄菜解擴彰栽塞孜嵌鳳備苦例茲申尖曰溪魂柞午絮冀9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第24頁,共141頁。3GridLayoutGridLayout布局是將容器的空間分成若干行和列的一個個網(wǎng)格,可以給出網(wǎng)格的行數(shù)和列數(shù),組件添加到這些網(wǎng)格中。當改變?nèi)萜鞯拇笮『螅渲械慕M件相對位置不變,但大小改變。容器中各個組件同高度、同寬度。各個組件缺省的排列方式為:從上到下,從左到右。戈鎂約蕭嘗僥甭它擄捕閃鄂胳茍郴料驚蔚站堯裕逢西洼洪惠穴鼠榮傳艙許9.Java圖形用戶界面設(shè)計 Java 語言程序
34、設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第25頁,共141頁。GridLayout類的構(gòu)造方法如下:public GridLayout()創(chuàng)建單行每個組件一列的GridLayout對象。public GridLayout(int rows, int cols) 創(chuàng)建指定行列數(shù)的GridLayout對象。public GridLayout(int rows, int cols, int hgap, int vgap)創(chuàng)建指定行列數(shù)的GridLayout對象。因為沒有容器缺省使用GridLayout,因此在使用GridLayout前,要用se
35、tLayout()方法將容器的布局管理器設(shè)置為GridLayout。在向GridLayout添加組件時,組件加入容器要按序進行,每個網(wǎng)格中都必須加入組件,若希望某個網(wǎng)格為空,可以為該網(wǎng)格加入一個空的標簽:add(new JLabel()。邱苞峭杯激劫蹬導(dǎo)滄志詛苫餾攘哥樟鼓孵躁標桶巾圍投馬蔽俏央稿匿亦哉9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第26頁,共141頁?!纠?.4】GridLayout布局。import java.awt.*;import javax.swing.*;public c
36、lass GridLayoutDemo extends JApplet public void init() Container c = getContentPane(); c.setLayout(new GridLayout(3,2); c.add(new Button(1); c.add(new Button(2); c.add(new Button(3); c.add(new Button(4); c.add(new Button(5); c.add(new Button(6); 除鵑販炕挪祁溜琶的悠燙捂破癱豪鴛龜烷他倍凌掌浴矯礬莆弦眼杠鴿糯按9.Java圖形用戶界面設(shè)計 Java 語言
37、程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第27頁,共141頁。 4.CardLayoutCardLayout布局管理器能夠使得多個組件共享同一顯示空間,這些組件之間的關(guān)系像一疊重疊的撲克牌,只有最上面的組件是可見的。注意:在一個顯示空間(卡片)中只能顯示一個組件,因此,可使用容器嵌套的方法來顯示多個組件。 例9.4運行的結(jié)果如下圖所示。合沁磋什具助穆性怖轉(zhuǎn)紊匯摘痞畏碩玩瞪玲荷門憚契瘩羞統(tǒng)個溜閣獺崗蓮9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電
38、子教案第28頁,共141頁。 CardLayout類的構(gòu)造方法如下:CardLayout()創(chuàng)建間距為零的對象。CardLayout(int hgap, int vgap)創(chuàng)建帶有水平hgap和垂直vgap間距的對象。為了使用疊在下面的組件,可以為每個組件取一名字,名字在用add()方法向容器添加組件時指定,需要某個組件時通過show()方法指定該組件的名字來選取它。也可以順序使用這些組件,或直接指明選取第一個組件(用first()方法)或最后一個組件(用last()方法)。宙擱鼓茨吃饒及單扳龔南邦冀乖指貴鄭額絲墑怕催滬鈕襪把玖俏推瞞抵里9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第
39、2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第29頁,共141頁?!纠?.5】CardLayout布局。import java.awt.*;import javax.swing.*;public class CardLayoutDemo extends JApplet CardLayout cl =new CardLayout(20,40); / 組件在卡片中有邊界 JButton b1=new JButton(卡片一); JButton b2=new JButton(卡片二); JButton b3=new JButton(卡片三); public
40、 void init() getContentPane().setLayout(cl); getContentPane().add(card1,b1); getContentPane().add(card2,b2); getContentPane().add(card3,b3); 兼梁翱距察暖苛母尾鴉逛內(nèi)拎郴毅積棧街曬逼祭輪惺茨葉爾銅琴詭牙供辛9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第30頁,共141頁。程序運行結(jié)果如下圖所示。程序中的三個按鈕組件順序添加到卡片布局管理器的各個卡片上,它們共
41、享同一顯示區(qū)域,因此只能見到最上面的“卡片一”按鈕。惱俯胞妊度昨葫淆其儡瓶鬼隋巾楞兜莫補埂決容鋅滇郊膀窩瞬喜計籃軟此9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第31頁,共141頁。5.GridBagLayoutGridBagLayout是最復(fù)雜也最靈活的布局管理器。這個布局管理器將組件放入單元格中,但允許一些組件跨越單元格??捎肎ridBagLayout類的構(gòu)造方法GridBagLayout()來創(chuàng)建一個GridBagLayout布局管理器。因GridBagLayout布局設(shè)置比較復(fù)雜,這里就
42、不介紹了,請讀者參看API說明或其他資料。 6.自定義布局硅堪佑握較擯鑷省駿顯者爬儉疹泉渾怕才槐牢闖侗扼勢頹又罷呢甫搖趨址9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第32頁,共141頁。若希望按照自己的要求來進行組件和界面圖形元素的布局,可用容器的setLayout(null)方法將容器的布局管理器設(shè)置為空,然后用下面的方法設(shè)置組件在容器中的位置和大?。簊etBounds(int a,int b,int width,int height)其中,參數(shù)a和b指定矩形形狀的組件左上角在容器中的坐標,
43、width和height指定組件的寬和高?!纠?.6】設(shè)置自己的布局管理器。import java.awt.*;import javax.swing.*;class NullLayout extends JFrame NullLayout() super(建設(shè)自己的布局管理器); Container c=getContentPane(); / 也可不用內(nèi)容窗格 c.setLayout(null);恫底晴去別次親轅冰繕慌矮鳳霹仰拱明校然殖孰浩啤窘供仔喻丸??绻喔?.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版)
44、電子教案第33頁,共141頁。 JButton jb1 =new JButton(按鈕1); JButton jb2 =new JButton(按鈕2); c.add(jb1);c.add(jb2); jb1.setBounds(10,10,100,30); jb2.setBounds(10,50,100,30); public static void main(String args) NullLayout nl=new NullLayout(); nl.setSize(200,150); nl.setVisible(true); 程序的運行結(jié)果如下圖所示。注意,采用這種方式的布局,組件的位
45、置和大小將不隨窗口大小的變化而變化。塞縱昔噴質(zhì)渦帝瞥玫嚏這鶴乏邑擁筑乾縣搬屏貧撲刀仍魯弧炙拂似擬謗詣9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第34頁,共141頁。下圖為例9.6的運行界面。麻閘邀峨誓糕殿龍量碘整杯振攢佛稼快茁稼絳蔽階瓜向衷衡攜邢碗除燦阮9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第35頁,共141頁。9.3常用Swing組件9.3.1 容器組件1.JFrame框架框架,是JFr
46、ame類的對象,是swing GUI應(yīng)用程序的主窗口。窗口有邊界、標題、關(guān)閉按鈕等。對Java應(yīng)用程序,應(yīng)至少包含一個框架,例9.1的應(yīng)用程序即使用了框架。有時,小程序也使用框架。JFrame類繼承于Frame類。JFrame類的構(gòu)造方法如下:JFrame() 創(chuàng)建無標題的初始不可見框架。JFrame(String title) 創(chuàng)建標題為title的初始不可見框架。 青動攬破嬌予忠猩角破芽俗法賈掠燈協(xié)鄂增穗叛硅前蔚募振腺骯漬摯剝偵9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第36頁,共141頁
47、。例如,創(chuàng)建帶標題“Java GUI應(yīng)用程序”的框架對象frame,可用語句: JFrame frame = new JFrame(Java GUI應(yīng)用程序); 要顯示框架對象代表的框架窗口,可使用方法setVisible()??捎谜Z句: frame.setVisible(true);可使得JFrame類對象frame表示的框架窗口顯示到屏幕上。一般在顯示框架前,可設(shè)置框架的初始顯示大小可使用setSize()方法或pack()方法。例如: frame.setSize(200,150); / 設(shè)置框架窗口初始大小為200150點 frame.pack(); / 設(shè)置框架窗口初始大小為剛好只顯示
48、出所有的組件。付刊押潭山羚妹飛岡吵逛吸椅抖計硬郭主瞇鋪宿珍磋仇尤膝驗拔慮宦次苑9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第37頁,共141頁。在向框架添加組件時,并不直接添加組件到框架,而是添加到內(nèi)容窗格(content pane),改變其他特性(布局管理器、背景色等)也對內(nèi)容窗格進行。要存取內(nèi)容窗格,可通過getContentPane()方法, 若希望用自己的容器替換掉內(nèi)容窗格(例如用JPanel),可以使用setContentPane()方法。 選擇框架的關(guān)閉按鈕后,框架窗口將自動關(guān)閉,但
49、若是應(yīng)用單個框架的應(yīng)用程序,為了在選擇框架的關(guān)閉按鈕時能退出程序,應(yīng)添加WindowListener監(jiān)聽器或書寫下列代碼:frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); 欄腦抗這棕彌膝要靠緊蕊咎瘴簍賦敬歪儉乖論陋泊菏巳瞥株耽勺鷹撒序渺9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第38頁,共141頁。JFrame的缺省觀感為Java (Metal), 若要使用其他的觀感,必須顯式設(shè)置。JFrame(應(yīng)該說是內(nèi)容窗格)的缺省布局管理器是B
50、orderLayout。2. JPanel面板JPanel是一種添加到其他容器使用的容器組件,可將組件添加到JPanel,然后再將JPanel添加到某個容器。JPanel也提供一個繪畫區(qū)域,可代替AWT的畫布Canvas (沒有JCanvas)。藏祭薛深熔慫商郵長受芹隙滋尚配廖已呸妒賓允吵寐液暫裕引股些玖拉減9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第39頁,共141頁。javax.swing.JPanel類繼承于javax.swing.JComponent類,其構(gòu)造方法有:public JP
51、anel() 創(chuàng)建具有缺省FlowLayout布局的JPanel對象。public JPanel(LayoutManager layout) 創(chuàng)建具有指定布局管理器的JPanel對象。將JPanel作為畫布的繪畫區(qū)域使用時,要使用下面的兩個步驟:首先,設(shè)置畫布繪圖區(qū)域的大??;其次,使用paintComponent()方法(不是paint()方法)來繪圖,在該方法體中,首先調(diào)用方法super.paintComponent()來清除顯示區(qū)域。 杭勛忘繹憶佬襲肺悉蘑鋼蹭卞撞趙匈雀正蓉俗江隕犬翔噎磋酵氫斧并稗鑰9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶
52、界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第40頁,共141頁。例如: public void paintComponent(Graphics g) super.paintComponent(g); . JPanel可指定邊界,可用的邊界有titled、etched、beveled 、line、matte、compound和empty等,也可以創(chuàng)建自己的邊界??捎肑Component類的setBorder()方法設(shè)置邊界。其用法如下: public void setBorder(Border border)其中,Border類的參數(shù)可用javax.swing.BorderFactor
53、y類中的方法獲得。獲取各種相應(yīng)邊界的方法為:createTitledBorder() createEtchedBorder()createBevelBorder() createRaisedBevelBorder()瘋審奉篙瀝睬氮賠恬頻約撩四毋摸瑣績蝗盂極徘炸喪鉚飛曝夸汪交縫蠶凳9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第41頁,共141頁。createLoweredBevelBorder() createLineBorder()createMatteBorder() createCompou
54、ndBorder()createEmptyBorder()【例9.7】使用JPanel。import java.awt.*;import javax.swing.*;class JPanelDemo extends JPanel JButton b1 = new JButton(JPanel); JButton b2 = new JButton(Demo); public JPanelDemo() setBackground(Color.white); add(b1); add(b2); 蔣處鞋歇攀恃玖蛙咱摩倆呢狡弛列飽盒屯杖澗人柄倍琵耪允專追梢糖貝勝9.Java圖形用戶界面設(shè)計 Java 語
55、言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第42頁,共141頁。 public static void main(String args) JPanel jp = new JPanelDemo(); jp.setBorder( BorderFactory.createTitledBorder( Hello,Border); JFrame frame = new JFrame(JPanelDemo); frame.setSize(200, 150); frame.setContentPane(jp); frame.setDefaultC
56、loseOperation( JFrame.EXIT_ON_CLOSE); frame.setVisible(true); 扣柜群宋皇窿閉奴要豺琴脖奈訝眺鼻稀粕鄒亢疑滌省輔字霹惦嶺屁漿梁文9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第43頁,共141頁。例9.7程序運行結(jié)果如下圖所示。潰袱撰當天氨烈男昏蓮京箕崎吁礁沿書弟邪瞅履咐蝦艦起堰艷熬痛露狗淹9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第44
57、頁,共141頁。3.JAppletjavax.swing.JApplet類是java.applet.Applet類的子類。使用Swing組件的小程序需繼承JApplet類。 除了所處的java包不同外,JApplet與Applet的主要區(qū)別還有:(1)缺省的布局管理器不同 Applet缺省的布局管理器是FlowLayout,而JApplet(內(nèi)容窗格)缺省的布局管理器是BorderLayout。蹲擅宮狂景序社攘峻閨動幸陶完裳話陶空己咋抓吏丑咸癌皆籮摸為殊摳癸9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電
58、子教案第45頁,共141頁。(2)加入組件的方式不同Applet可直接加入組件,而JApplet缺省使用內(nèi)容窗格ContentPane作為主容器。加入Swing組件時,要先使用JApplet的方法getContentPane()獲得一個Container對象,再調(diào)用這個對象的add()方法將Swing組件加入到JApplet的容器中。4.JTabbedPanejavax. javax.swing.JTabbedPane類繼承于javax.swing.JComponent,它的對象反映為一組帶標簽的面板,每個面板都可以存放組件,因此JTabbedPane是一容器組件。逸錠睛癌脖蝎網(wǎng)琉蝦嫌剁耍撐械
59、雀誓兇八蹄殆補媒夷猴薯袁嗅尸脂作紅廟9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第46頁,共141頁。JTabbedPane類的構(gòu)造方法有:JTabbedPane()創(chuàng)建空對象,該對象具有缺省的標簽位置JTabbedPane.TOP和缺省的布局策略JTabbedPane.WRAP_TAB_LAYOUT。JTabbedPane(int tabPlacement)創(chuàng)建空對象,該對象具有指定的標簽位置:JTabbedPane.TOP、JTabbedPane.BOTTOM、JTabbedPane.LEF
60、T或JTabbedPane.RIGHT以及缺省的布局策略JTabbedPane.WRAP_TAB_LAYOUT。JTabbedPane(int tabPlacement, int tabLayoutPolicy)創(chuàng)建空對象,該對象具有指定的標簽位置和布局策略。禹右復(fù)喲均施受傣盞誡捆寒史蝸倪輕關(guān)烹漢戚忽榔形必樁酬極語歧飲僚蒜9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案9.Java圖形用戶界面設(shè)計 Java 語言程序設(shè)計(第2版) 電子教案第47頁,共141頁?!纠?.8】使用JTabbedPane容器。import java.awt.*;import java.awt
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《祝?!贰堆b在套子里的人》聯(lián)讀教學設(shè)計-2023-2024學年統(tǒng)編版高中語文必修下冊
- 三基醫(yī)學習題含參考答案
- 2024天津市管道集工程團有限公司公開選聘總法律顧問(兼首席合規(guī)官)筆試參考題庫附帶答案詳解
- 2024國能榆林化工有限公司系統(tǒng)內(nèi)招聘27人筆試參考題庫附帶答案詳解
- 10 奪取抗日戰(zhàn)爭和人民解放戰(zhàn)爭的勝利 第四課時 教學設(shè)計-2023-2024學年道德與法治五年級下冊統(tǒng)編版
- 2025年廣東嶺南職業(yè)技術(shù)學院單招職業(yè)傾向性測試題庫審定版
- Module 12 Unit 2 教學設(shè)計 2024-2025學年外研版九年級英語上冊
- 第二單元《鑒賞“虛”“實”藝術(shù)傳承革命精神》大單元教學設(shè)計-2024-2025學年統(tǒng)編版高中語文選擇性必修中冊
- 第二單元第5課《分支結(jié)構(gòu)程序設(shè)計》教學設(shè)計 2023-2024學年浙教版(2020)初中信息技術(shù)八年級上冊
- 13 精衛(wèi)填海教學設(shè)計-2024-2025學年四年級上冊語文統(tǒng)編版
- 第六章 圍手術(shù)期護理課件
- 2024廣東省深圳市寶安區(qū)中考初三二模英語試題及答案
- 中考字音字形練習題(含答案)-字音字形專項訓練
- 音響設(shè)備出租行業(yè)競爭分析及發(fā)展前景預(yù)測報告
- DB63-T 2313-2024 三江源國家公園生態(tài)監(jiān)測指標
- 2024年湖南高速鐵路職業(yè)技術(shù)學院單招職業(yè)適應(yīng)性測試題庫及答案1套
- 駐場人員服務(wù)方案
- C語言程序設(shè)計(山東聯(lián)盟-青島科技大學)智慧樹知到答案2024年青島科技大學
- 2024-2029年中國限幅器芯片行業(yè)市場現(xiàn)狀分析及競爭格局與投資發(fā)展研究報告
- 醫(yī)療器械市場規(guī)劃
- 第13課+清前中期的興盛與危機【中職專用】《中國歷史》(高教版2023基礎(chǔ)模塊)
評論
0/150
提交評論