Java圖形用戶界面設(shè)計(jì).ppt
《Java圖形用戶界面設(shè)計(jì).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《Java圖形用戶界面設(shè)計(jì).ppt(141頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
第9章圖形用戶界面 GUI 設(shè)計(jì) 9 1圖形用戶界面設(shè)計(jì)概述 9 1 1GUI支持包和簡單GUI程序例1 java awt包Java語言在java awt包中提供了大量地進(jìn)行GUI設(shè)計(jì)所使用的類和接口 包括繪制圖形 設(shè)置字體和顏色 控制組件 處理事件等內(nèi)容 AWT是Java語言進(jìn)行GUI程序設(shè)計(jì)的基礎(chǔ) 2 javax swing包Swing包是Java基礎(chǔ)類庫 JavaFoundationClasses JFC 的一部分 Swing提供了從按鈕到可分拆面板和表格的所有組件 Swing組件是Java語言提供的第二代GUI設(shè)計(jì)工具包 它以AWT為基礎(chǔ) 在AWT內(nèi)容的基礎(chǔ)上新增或改進(jìn)了一些GUI組件 使得GUI程序功能更強(qiáng)大 設(shè)計(jì)更容易 更方便 Swing 是開發(fā)新組件的項(xiàng)目代碼名 現(xiàn)在 這個(gè)名字常用來引用新組件和相關(guān)的API AWT組件和對(duì)應(yīng)的Swing組件 從名稱上很容易記憶和區(qū)別 例如 AWT的框架類 面板類 按鈕類和菜單類 被命名為Frame Panel Button和Menu 而Swing對(duì)應(yīng)的組件類被命名為JFrame JPanel JButton和JMenu 與AWT組件相比 Swing組件的名前多一個(gè) J 字母 另外 AWT組件在java awt包中 而Swing組件在javax swing包中 3 一個(gè)JavaGUI簡單程序 例9 1 一個(gè)簡單的SwingGUI應(yīng)用程序 在一個(gè)框架窗口中顯示兩個(gè)標(biāo)簽和一個(gè)按鈕 上面的標(biāo)簽顯示一串固定的文字信息 選擇按鈕后在下面的標(biāo)簽上顯示系統(tǒng)現(xiàn)在的時(shí)間 importjava awt importjava awt event importjavax swing importjava util 繼承JFrame類并實(shí)現(xiàn)ActionListener接口publicclassSwingDemoextendsJFrameimplementsActionListener JButtonb1 聲明按鈕對(duì)象JLabell1 l2 聲明標(biāo)簽對(duì)象 SwingDemo 定義構(gòu)造方法super Swing應(yīng)用程序的例 調(diào)用父類的構(gòu)造方法l1 newJLabel 一個(gè)GUI應(yīng)用程序的例子 JLabel CENTER 定義標(biāo)簽 文字居中l(wèi)2 newJLabel 定義無文字標(biāo)簽b1 newJButton 現(xiàn)在時(shí)間 T 定義按鈕b1 setMnemonic KeyEvent VK T 設(shè)置按鈕的快捷鍵b1 setActionCommand time 設(shè)置控制名b1 addActionListener this 注冊(cè)按鈕事件add l1 BorderLayout NORTH 添加標(biāo)簽l1add l2 BorderLayout CENTER 添加標(biāo)簽l2add b1 BorderLayout SOUTH 添加標(biāo)簽b1 對(duì)按鈕引發(fā)事件編程publicvoidactionPerformed ActionEvente 捕獲按鈕事件Calendarc1 Calendar getInstance 獲取系統(tǒng)日期和事件if e getActionCommand equals time 判斷是否為所需的按鈕事件l2 setText 現(xiàn)在時(shí)間是 c1 get Calendar HOUR OF DAY 時(shí) c1 get Calendar MINUTE 分 設(shè)置標(biāo)簽文字l2 setHorizontalAlignment JLabel CENTER 設(shè)置標(biāo)簽標(biāo)簽文字居中對(duì)齊 elseSystem exit 0 publicstaticvoidmain Stringargs 主方法JFrame setDefaultLookAndFeelDecorated true 加此語句顯示為運(yùn)行結(jié)果圖的右圖JFrameframe newSwingDemo 創(chuàng)建JFrame對(duì)象 初始不可見frame setDefaultCloseOperation JFrame EXIT ON CLOSE 設(shè)置框架關(guān)閉按鈕事件frame pack 壓縮框架的顯示區(qū)域frame setVisible true 顯示框架主窗口 程序運(yùn)行后顯示的形式如下圖 JavaSwingGUI應(yīng)用程序中的基本代碼如下 1 引入合適的包和類一般的SwingGUI應(yīng)用程序應(yīng)包含程序中的前三個(gè)引入語句 它們分別表示引入awt包 awt事件處理包和swing包 其他包按需引入 由于Swing組件使用AWT的結(jié)構(gòu) 包括AWT的事件驅(qū)動(dòng)模式 所以 使用swing組件的程序一般需要使用awt包 2 使用缺省的觀感或設(shè)置自己的觀感 LookandFeel 3 設(shè)置一個(gè)頂層的容器 4 根據(jù)需要 使用缺省的布局管理器或設(shè)置另外的布局管理器 5 定義組件并將它們添加到容器 6 對(duì)組件或事件編碼 9 1 2容器 組件 布局和觀感1 容器 Container 和組件 Component 一個(gè)Java的圖形用戶界面的最基本元素是組件 組件是可以以圖形化的方式顯示在屏幕上并能與用戶進(jìn)行交互的對(duì)象 如一個(gè)按鈕 一個(gè)文本框等 在Java語言中 通常將組件放在一定的容器內(nèi)使用 容器實(shí)際上是一種具有容納其他組件和容器的功能的組件 抽象類Container是所有容器的父類 其中包含了很多有關(guān)容器的功能和方法 而類Container又是Java語言的組件類Component的子類 2 布局管理器 LayoutManager 為了使得圖形用戶界面具有良好的平臺(tái)無關(guān)性 在Java語言中提供了布局管理器這個(gè)工具來管理組件在容器中的布局 而不使用直接設(shè)置組件位置和大小的方式 容器中的組件定位由布局管理器決定 每個(gè)容器都有一個(gè)缺省的布局管理器 當(dāng)容器需要對(duì)某個(gè)組件進(jìn)行定位或判斷其大小尺寸時(shí) 就會(huì)調(diào)用其相應(yīng)的布局管理器 但也可以不用缺省的布局管理器 在程序中指定其新的布局管理器 Java平臺(tái)提供多種布局管理器 常用的有FlowLayout BorderLayout GridLayout CardLayout BoxLayout和GridBagLayout等 使用不同的布局管理器 組件在容器上的位置和大小都是很不一樣的 在程序中安排組件的位置和大小時(shí) 應(yīng)該注意 1 容器中的布局管理器負(fù)責(zé)各個(gè)組件的大小和位置 因此用戶無法在這種情況下直接設(shè)置這些屬性 若試圖使用Java語言提供的setLocation setSize setBounds 等方法 則都會(huì)被布局管理器覆蓋 2 若用戶確實(shí)需要親自設(shè)置組件的位置和大小 則應(yīng)取消該容器的布局管理器 方法為 setLayout null 隨后 用戶必須使用setLocation setSize setBounds 等方法為組件設(shè)置大小和位置 但這種方法將會(huì)導(dǎo)致程序的系統(tǒng)相關(guān) 在一個(gè)GUI應(yīng)用程序的界面上 除了可以見到上述的標(biāo)準(zhǔn)GUI元素外 還可以見到一些非交互的起到裝飾 美化界面的作用的幾何圖形 圖案 圖像等內(nèi)容 3 觀感 LookandFeel Javaswing的一個(gè)重要特征是它的可插入的 觀感 體系 一個(gè)Swing應(yīng)用程序或一個(gè)最終用戶可指明所需要的觀感 使得Swing應(yīng)用程序的外觀和行為都可以被定制 Swing運(yùn)行一個(gè)缺省的Java觀感 也稱為Metal觀感 還實(shí)現(xiàn)了模仿Motif和Windows的觀感 這樣 一個(gè)Swing程序可擁有Java程序的獨(dú)特外觀 也可以擁有熟悉的Windows操作系統(tǒng)外觀 在本章稍后部分的單選按鈕的程序例中分別顯示了Windows Motif和Metal三種不同風(fēng)格的觀感 一般在應(yīng)用程序的JFrame的構(gòu)造方法中或在JApplet的init 方法中進(jìn)行觀感的設(shè)置 例9 2 設(shè)置觀感 importjavax swing importjava awt publicclassSetLAF publicstaticvoidsetNativeLookAndFeel try UIManager setLookAndFeel UIManager getSystemLookAndFeelClassName catch Exceptione System out println 設(shè)置nativeLAF錯(cuò)誤 e publicstaticvoidsetJavaLookAndFeel try UIManager setLookAndFeel UIManager getCrossPlatformLookAndFeelClassName catch Exceptione System out println 設(shè)置JavaLAF錯(cuò)誤 e publicstaticvoidsetMotifLookAndFeel try UIManager setLookAndFeel com sun java swing plaf motif MotifLookAndFeel catch Exceptione System out println 設(shè)置MotifLAF錯(cuò)誤 e 因?yàn)閟etLookAndFeel 方法拋出異常 因此設(shè)置觀感的代碼應(yīng)捕捉異常 本例創(chuàng)建的類SetLAF可在以后的程序中設(shè)置觀感時(shí)使用 9 1 3事件處理在一個(gè)GUI程序中 為了能夠接收用戶的輸入 命令的按鍵和鼠標(biāo)操作 程序系統(tǒng)首先應(yīng)該能夠識(shí)別這些操作并做出相應(yīng)的響應(yīng) 通常一個(gè)鍵盤和鼠標(biāo)操作將引發(fā)一個(gè)系統(tǒng)預(yù)先定義好的事件 用戶程序只要編寫代碼定義每個(gè)事件發(fā)生時(shí)程序應(yīng)做出何種響應(yīng)即可 這些代碼會(huì)在它們對(duì)應(yīng)的事件發(fā)生時(shí)由系統(tǒng)自動(dòng)調(diào)用 這就是GUI程序中事件和事件響應(yīng)的基本原理 在Java語言中 除了鍵盤和鼠標(biāo)操作 系統(tǒng)的狀態(tài)改變也可以引發(fā)事件 可能產(chǎn)生事件的組件稱為事件源 不同事件源上發(fā)生的事件種類是不同的 若希望事件源上引發(fā)的事件被程序處理 需要將事件源注冊(cè)給能夠處理該事件源上那種事件類型的監(jiān)聽器 監(jiān)聽器具有監(jiān)聽和處理某類事件的功能 它可以是包容事件源的容器 也可以是另外的對(duì)象 也就是說 事件源和事件處理是分開的 一般組件都不處理自己的事件 而將事件處理委托給外部的處理實(shí)體 這種事件處理模型稱為授權(quán)處理模型 事件的行為多種多樣 由不同的監(jiān)聽器處理 編寫事件處理程序首先應(yīng)確定關(guān)注的事件屬于何種監(jiān)聽器類型 在AWT中 提供11種標(biāo)準(zhǔn)的監(jiān)聽器類型 見下表 監(jiān)聽器適配器類注冊(cè)方法ActionListeneraddActionListenerAdjustmentListeneraddAdjustmentListenerComponentListenerComponentAdapteraddComponentListenerContainerListenerContainerAdapteraddContainerListenerFocusListenerFocusAdapteraddFocusListenerItemListeneraddItemListenerKeyListenerKeyAdapteraddKeyListenerMouseListenerMouseAdapteraddMouseListenerMouseMotionListenerMouseMotionAdapteraddMouseMotionListenerTextListeneraddTextListenerWindowListenerWindowAdapteraddWindowListener 在確定監(jiān)聽器類型后 要用事件源類的注冊(cè)方法來注冊(cè)一個(gè)監(jiān)聽器類的對(duì)象 這樣 事件源產(chǎn)生的事件會(huì)傳送給已注冊(cè)的處理該類事件的監(jiān)聽器對(duì)象 該對(duì)象將自動(dòng)調(diào)用相應(yīng)的事件處理方法來處理該事件 具體的注冊(cè)方法是 用監(jiān)聽器類的對(duì)象作為參數(shù)調(diào)用事件源本身的addXxxListener 方法 該方法的參數(shù)是一個(gè)監(jiān)聽器類的對(duì)象 有多種形式 例如 1 分離的監(jiān)聽器類 該類通常為繼承相應(yīng)事件適配器類的子類 類中包含了事件處理方法 參數(shù)是該類的一個(gè)對(duì)象 2 實(shí)現(xiàn)監(jiān)聽器接口 參數(shù)為this 表示本對(duì)象就是一個(gè)監(jiān)聽器類的對(duì)象 在本類中包含事件處理方法 3 有名內(nèi)部類 參數(shù)形式為繼承事件適配器類的子類對(duì)象 在子類中包含事件處理方法 4 匿名內(nèi)部類 參數(shù)形式為用new開始的一個(gè)無名的類定義 其中包含事件處理方法 9 2布局管理器 在容器中所有組件的布局 位置和大小 由布局管理器來控制 在Java語言中提供了FlowLayout BorderLayout GridLayout CardLayout和GridBagLayout等多種布局管理器 每種容器都有自己缺省的布局管理器 缺省地 JPanel使用FlowLayout 而內(nèi)容窗格ContentPane JApplet JDialog和JFrame對(duì)象的主容器 使用BorderLayout 如果不希望使用缺省的布局管理器 則可使用所有容器的父類Container的setLayout 方法來改變?nèi)笔〉牟季止芾砥?1 FlowLayoutFlowLayout布局是一種最基本的布局 這種布局指的是把組件一個(gè)接一個(gè)從左至右 從上至下地依次放在容器上 每一行中的組件缺省為居中對(duì)齊 當(dāng)容器的尺寸改變后 組件的大小不變 但布局將會(huì)隨之變化 FlowLayout是Applet和JPanel的缺省布局管理器 FlowLayout類的構(gòu)造方法如下 FlowLayout 創(chuàng)建每行組件對(duì)齊方式為居中對(duì)齊 組件間距為5個(gè)像素單位的對(duì)象FlowLayout intalign 創(chuàng)建指定每行組件對(duì)齊方式 組件間距為5個(gè)像素單位的對(duì)象 align可取三個(gè)靜態(tài)常量LEFT CENTER和RIGHT之一 分別表示左 中 右對(duì)齊方式 FlowLayout intalign inthgap intvgap 創(chuàng)建指定每行組件對(duì)齊方式的對(duì)象 該對(duì)象也使用參數(shù)vgap和hgap指定了組件間的以像素為單位的縱橫間距 向使用FlowLayout布局的容器添加組件可簡單地使用下面的語句 add 組件名 2 BorderLayoutBorderLayout是內(nèi)容窗格的缺省布局管理器 內(nèi)容窗格是框架JFrame 小程序JApplet和對(duì)話框JDialog的主容器 BorderLayout將容器的布局分為五個(gè)區(qū) 北區(qū) 南區(qū) 東區(qū) 西區(qū)和中區(qū) 這幾個(gè)區(qū)的分布規(guī)律是 上北下南 左西右東 當(dāng)容器的大小改變時(shí) 容器中的各個(gè)組件相對(duì)位置不變 其中間部分組件的尺寸會(huì)發(fā)生變化 四周組件寬度固定不變 BorderLayout類的構(gòu)造方法如下 BorderLayout 創(chuàng)建組件間無間距的BorderLayout對(duì)象 BorderLayout inthgap intvgap 創(chuàng)建有指定組件間距的對(duì)象 向BorderLayout布局的容器添加組件時(shí) 每添加一個(gè)組件都應(yīng)指明該組件加在哪個(gè)區(qū)域中 add 方法的第二個(gè)參數(shù)指明加入的區(qū)域 區(qū)域東南西北中可用五個(gè)靜態(tài)常量表示 BorderLayout EAST BorderLayout SOUTH BorderLayout WEST BorderLayout NORTH和BorderLayout CENTER 例9 3 將五個(gè)按鈕加入BorderLayout的五個(gè)區(qū) importjava awt importjavax swing publicclassBorderLayoutDemoextendsJApplet publicvoidinit Containerc getContentPane c add newButton 北North BorderLayout NORTH c add newButton 南South BorderLayout SOUTH c add newButton 東East BorderLayout EAST c add newButton 西West BorderLayout WEST c add newButton 中Center BorderLayout CENTER 程序運(yùn)行的結(jié)果見下圖 3 GridLayoutGridLayout布局是將容器的空間分成若干行和列的一個(gè)個(gè)網(wǎng)格 可以給出網(wǎng)格的行數(shù)和列數(shù) 組件添加到這些網(wǎng)格中 當(dāng)改變?nèi)萜鞯拇笮『?其中的組件相對(duì)位置不變 但大小改變 容器中各個(gè)組件同高度 同寬度 各個(gè)組件缺省的排列方式為 從上到下 從左到右 GridLayout類的構(gòu)造方法如下 publicGridLayout 創(chuàng)建單行每個(gè)組件一列的GridLayout對(duì)象 publicGridLayout introws intcols 創(chuàng)建指定行列數(shù)的GridLayout對(duì)象 publicGridLayout introws intcols inthgap intvgap 創(chuàng)建指定行列數(shù)的GridLayout對(duì)象 因?yàn)闆]有容器缺省使用GridLayout 因此在使用GridLayout前 要用setLayout 方法將容器的布局管理器設(shè)置為GridLayout 在向GridLayout添加組件時(shí) 組件加入容器要按序進(jìn)行 每個(gè)網(wǎng)格中都必須加入組件 若希望某個(gè)網(wǎng)格為空 可以為該網(wǎng)格加入一個(gè)空的標(biāo)簽 add newJLabel 例9 4 GridLayout布局 importjava awt importjavax swing publicclassGridLayoutDemoextendsJApplet publicvoidinit Containerc getContentPane c setLayout newGridLayout 3 2 c add newButton 1 c add newButton 2 c add newButton 3 c add newButton 4 c add newButton 5 c add newButton 6 4 CardLayoutCardLayout布局管理器能夠使得多個(gè)組件共享同一顯示空間 這些組件之間的關(guān)系像一疊重疊的撲克牌 只有最上面的組件是可見的 注意 在一個(gè)顯示空間 卡片 中只能顯示一個(gè)組件 因此 可使用容器嵌套的方法來顯示多個(gè)組件 例9 4運(yùn)行的結(jié)果如下圖所示 CardLayout類的構(gòu)造方法如下 CardLayout 創(chuàng)建間距為零的對(duì)象 CardLayout inthgap intvgap 創(chuàng)建帶有水平hgap和垂直vgap間距的對(duì)象 為了使用疊在下面的組件 可以為每個(gè)組件取一名字 名字在用add 方法向容器添加組件時(shí)指定 需要某個(gè)組件時(shí)通過show 方法指定該組件的名字來選取它 也可以順序使用這些組件 或直接指明選取第一個(gè)組件 用first 方法 或最后一個(gè)組件 用last 方法 例9 5 CardLayout布局 importjava awt importjavax swing publicclassCardLayoutDemoextendsJApplet CardLayoutcl newCardLayout 20 40 組件在卡片中有邊界JButtonb1 newJButton 卡片一 JButtonb2 newJButton 卡片二 JButtonb3 newJButton 卡片三 publicvoidinit getContentPane setLayout cl getContentPane add card1 b1 getContentPane add card2 b2 getContentPane add card3 b3 程序運(yùn)行結(jié)果如下圖所示 程序中的三個(gè)按鈕組件順序添加到卡片布局管理器的各個(gè)卡片上 它們共享同一顯示區(qū)域 因此只能見到最上面的 卡片一 按鈕 5 GridBagLayoutGridBagLayout是最復(fù)雜也最靈活的布局管理器 這個(gè)布局管理器將組件放入單元格中 但允許一些組件跨越單元格 可用GridBagLayout類的構(gòu)造方法GridBagLayout 來創(chuàng)建一個(gè)GridBagLayout布局管理器 因GridBagLayout布局設(shè)置比較復(fù)雜 這里就不介紹了 請(qǐng)讀者參看API說明或其他資料 6 自定義布局 若希望按照自己的要求來進(jìn)行組件和界面圖形元素的布局 可用容器的setLayout null 方法將容器的布局管理器設(shè)置為空 然后用下面的方法設(shè)置組件在容器中的位置和大小 setBounds inta intb intwidth intheight 其中 參數(shù)a和b指定矩形形狀的組件左上角在容器中的坐標(biāo) width和height指定組件的寬和高 例9 6 設(shè)置自己的布局管理器 importjava awt importjavax swing classNullLayoutextendsJFrame NullLayout super 建設(shè)自己的布局管理器 Containerc getContentPane 也可不用內(nèi)容窗格c setLayout null JButtonjb1 newJButton 按鈕1 JButtonjb2 newJButton 按鈕2 c add jb1 c add jb2 jb1 setBounds 10 10 100 30 jb2 setBounds 10 50 100 30 publicstaticvoidmain Stringargs NullLayoutnl newNullLayout nl setSize 200 150 nl setVisible true 程序的運(yùn)行結(jié)果如下圖所示 注意 采用這種方式的布局 組件的位置和大小將不隨窗口大小的變化而變化 下圖為例9 6的運(yùn)行界面 9 3常用Swing組件 9 3 1容器組件1 JFrame框架框架 是JFrame類的對(duì)象 是swingGUI應(yīng)用程序的主窗口 窗口有邊界 標(biāo)題 關(guān)閉按鈕等 對(duì)Java應(yīng)用程序 應(yīng)至少包含一個(gè)框架 例9 1的應(yīng)用程序即使用了框架 有時(shí) 小程序也使用框架 JFrame類繼承于Frame類 JFrame類的構(gòu)造方法如下 JFrame 創(chuàng)建無標(biāo)題的初始不可見框架 JFrame Stringtitle 創(chuàng)建標(biāo)題為title的初始不可見框架 例如 創(chuàng)建帶標(biāo)題 JavaGUI應(yīng)用程序 的框架對(duì)象frame 可用語句 JFrameframe newJFrame JavaGUI應(yīng)用程序 要顯示框架對(duì)象代表的框架窗口 可使用方法setVisible 可用語句 frame setVisible true 可使得JFrame類對(duì)象frame表示的框架窗口顯示到屏幕上 一般在顯示框架前 可設(shè)置框架的初始顯示大小可使用setSize 方法或pack 方法 例如 frame setSize 200 150 設(shè)置框架窗口初始大小為200 150點(diǎn)frame pack 設(shè)置框架窗口初始大小為剛好只顯示出所有的組件 在向框架添加組件時(shí) 并不直接添加組件到框架 而是添加到內(nèi)容窗格 contentpane 改變其他特性 布局管理器 背景色等 也對(duì)內(nèi)容窗格進(jìn)行 要存取內(nèi)容窗格 可通過getContentPane 方法 若希望用自己的容器替換掉內(nèi)容窗格 例如用JPanel 可以使用setContentPane 方法 選擇框架的關(guān)閉按鈕后 框架窗口將自動(dòng)關(guān)閉 但若是應(yīng)用單個(gè)框架的應(yīng)用程序 為了在選擇框架的關(guān)閉按鈕時(shí)能退出程序 應(yīng)添加WindowListener監(jiān)聽器或書寫下列代碼 frame setDefaultCloseOperation JFrame EXIT ON CLOSE JFrame的缺省觀感為Java Metal 若要使用其他的觀感 必須顯式設(shè)置 JFrame 應(yīng)該說是內(nèi)容窗格 的缺省布局管理器是BorderLayout 2 JPanel面板JPanel是一種添加到其他容器使用的容器組件 可將組件添加到JPanel 然后再將JPanel添加到某個(gè)容器 JPanel也提供一個(gè)繪畫區(qū)域 可代替AWT的畫布Canvas 沒有JCanvas javax swing JPanel類繼承于javax swing JComponent類 其構(gòu)造方法有 publicJPanel 創(chuàng)建具有缺省FlowLayout布局的JPanel對(duì)象 publicJPanel LayoutManagerlayout 創(chuàng)建具有指定布局管理器的JPanel對(duì)象 將JPanel作為畫布的繪畫區(qū)域使用時(shí) 要使用下面的兩個(gè)步驟 首先 設(shè)置畫布繪圖區(qū)域的大小 其次 使用paintComponent 方法 不是paint 方法 來繪圖 在該方法體中 首先調(diào)用方法super paintComponent 來清除顯示區(qū)域 例如 publicvoidpaintComponent Graphicsg super paintComponent g JPanel可指定邊界 可用的邊界有titled etched beveled line matte compound和empty等 也可以創(chuàng)建自己的邊界 可用JComponent類的setBorder 方法設(shè)置邊界 其用法如下 publicvoidsetBorder Borderborder 其中 Border類的參數(shù)可用javax swing BorderFactory類中的方法獲得 獲取各種相應(yīng)邊界的方法為 createTitledBorder createEtchedBorder createBevelBorder createRaisedBevelBorder createLoweredBevelBorder createLineBorder createMatteBorder createCompoundBorder createEmptyBorder 例9 7 使用JPanel importjava awt importjavax swing classJPanelDemoextendsJPanel JButtonb1 newJButton JPanel JButtonb2 newJButton Demo publicJPanelDemo setBackground Color white add b1 add b2 publicstaticvoidmain String args JPaneljp newJPanelDemo jp setBorder BorderFactory createTitledBorder Hello Border JFrameframe newJFrame JPanelDemo frame setSize 200 150 frame setContentPane jp frame setDefaultCloseOperation JFrame EXIT ON CLOSE frame setVisible true 例9 7程序運(yùn)行結(jié)果如下圖所示 3 JAppletjavax swing JApplet類是java applet Applet類的子類 使用Swing組件的小程序需繼承JApplet類 除了所處的java包不同外 JApplet與Applet的主要區(qū)別還有 1 缺省的布局管理器不同Applet缺省的布局管理器是FlowLayout 而JApplet 內(nèi)容窗格 缺省的布局管理器是BorderLayout 2 加入組件的方式不同Applet可直接加入組件 而JApplet缺省使用內(nèi)容窗格ContentPane作為主容器 加入Swing組件時(shí) 要先使用JApplet的方法getContentPane 獲得一個(gè)Container對(duì)象 再調(diào)用這個(gè)對(duì)象的add 方法將Swing組件加入到JApplet的容器中 4 JTabbedPanejavax javax swing JTabbedPane類繼承于javax swing JComponent 它的對(duì)象反映為一組帶標(biāo)簽的面板 每個(gè)面板都可以存放組件 因此JTabbedPane是一容器組件 JTabbedPane類的構(gòu)造方法有 JTabbedPane 創(chuàng)建空對(duì)象 該對(duì)象具有缺省的標(biāo)簽位置JTabbedPane TOP和缺省的布局策略JTabbedPane WRAP TAB LAYOUT JTabbedPane inttabPlacement 創(chuàng)建空對(duì)象 該對(duì)象具有指定的標(biāo)簽位置 JTabbedPane TOP JTabbedPane BOTTOM JTabbedPane LEFT或JTabbedPane RIGHT以及缺省的布局策略JTabbedPane WRAP TAB LAYOUT JTabbedPane inttabPlacement inttabLayoutPolicy 創(chuàng)建空對(duì)象 該對(duì)象具有指定的標(biāo)簽位置和布局策略 例9 8 使用JTabbedPane容器 importjava awt importjava awt event importjavax swing importjavax swing event publicclassJTabbedPaneDemo publicstaticvoidmain Stringargs newMyTabbedPane classMyTabbedPaneextendsJFrameimplementsChangeListener ActionListener JTabbedPanejt JButtonjb intindex 0 MyTabbedPane super 使用標(biāo)簽面板容器 jt newJTabbedPane jb newJButton 5 for inti 0 i 5 i jb i newJButton 第 i 頁面板 jb i addActionListener this jt addTab 頁標(biāo)簽 i jb i jt addChangeListener this getContentPane add jt BorderLayout CENTER setDefaultCloseOperation JFrame EXIT ON CLOSE setSize 300 200 setVisible true publicvoidstateChanged ChangeEvente if e getSource jt inti JTabbedPane e getSource getSelectedIndex jb index setVisible false jb i setVisible true index i publicvoidactionPerformed ActionEvente setTitle 響應(yīng)單擊 JButton e getSource getText 例9 8運(yùn)行結(jié)果如下圖所示 9 3 2按鈕 JButton 按鈕是GUI中非常重要的一種基本組件 按鈕一般對(duì)應(yīng)一個(gè)事先定義好的事件 執(zhí)行功能 一段程序 當(dāng)使用者單擊按鈕時(shí) 系統(tǒng)自動(dòng)執(zhí)行與該按鈕聯(lián)系的程序 從而完成預(yù)定的功能 JButton類提供對(duì)按鈕的支持 它的類層次關(guān)系如下 java awt Container javax swing JComponent javax swing AbstractButton javax swing JButton JButton類有如下的構(gòu)造方法 JButton 創(chuàng)建空按鈕 JButton Iconicon 創(chuàng)建帶圖標(biāo)的按鈕 JButton Stringtext 創(chuàng)建帶文字的按鈕 JButton Stringtext Iconicon 創(chuàng)建帶文字和圖標(biāo)的按鈕 JButton組件與AWT的Button組件相比 增加了顯示文本中可用HTML標(biāo)記 可帶圖標(biāo)等功能 在JButton按鈕的使用中 常用到繼承來的setMnemonic 設(shè)置快捷字母鍵 setActionCommand 設(shè)置動(dòng)作命令 方法等 JButton組件引發(fā)的事件為ActionEvent 可實(shí)現(xiàn)ActionListener監(jiān)聽器接口的actionPerformed 方法 用addActionListener 方法注冊(cè) 用getActionCommand 或getSource 方法確定事件源 例9 9 設(shè)計(jì)一個(gè)GUI應(yīng)用程序 有兩個(gè)標(biāo)簽l1 l2和三個(gè)按鈕b1 b2 b3 l1標(biāo)簽顯示固定的文字 l2標(biāo)簽的文字隨選擇不同的按鈕而變化 選擇b1按鈕時(shí) l2標(biāo)簽顯示為 歡迎進(jìn)入Java世界 選擇b2按鈕時(shí) l2標(biāo)簽顯示當(dāng)前的日期 選擇b3按鈕時(shí) 退出該應(yīng)用程序 程序如下 importjava awt importjava awt event importjavax swing importjava util publicclassJButtonDemoextendsJpanelimplementsActionListener JButtonb1 b2 b3 staticJLabell1 l2 JButtonDemo l1 newJLabel 這是一個(gè)演示按鈕動(dòng)作的程序 JLabel CENTER l2 newJLabel JLabel CENTER b1 newJButton 歡迎 w b1 setMnemonic KeyEvent VK W 設(shè)置按鈕的快捷鍵b1 setActionCommand welcome b2 newJButton 日期 d b2 setMnemonic KeyEvent VK D 設(shè)置快捷字符為Db2 setActionCommand date b3 newJButton 退出 q b3 setMnemonic KeyEvent VK Q 設(shè)置快捷字符為Qb3 setActionCommand quit b1 addActionListener this b2 addActionListener this b3 addActionListener this add b1 add b2 add b3 publicvoidactionPerformed ActionEvente Calendarc1 Calendar getInstance if e getActionCommand equals welcome l2 setText 歡迎進(jìn)入Java世界 elseif e getActionCommand equals date l2 setText 今天是 c1 get Calendar YEAR 年 c1 get Calendar MONTH 1 月 c1 get Calendar DATE 日 elseSystem exit 0 l2 setHorizontalAlignment JLabel CENTER 標(biāo)簽文字水平居中 publicstaticvoidmain Stringargs JFrameframe newJFrame 使用JButton frame getContentPane add newJButtonDemo BorderLayout SOUTH frame getContentPane add l1 BorderLayout NORTH frame getContentPane add l2 BorderLayout CENTER frame setDefaultCloseOperation JFrame EXIT ON CLOSE frame pack frame setVisible true 本程序中命令按鈕設(shè)置了快捷字母鍵 可用鼠標(biāo)單擊或按Alt 快捷字母來選擇按鈕 例9 9運(yùn)行啟動(dòng)后選擇 歡迎 按鈕和選擇 日期 按鈕后顯示的情況見下左圖和下右圖 例9 10 帶圖形和HTML文字的按鈕 importjava awt importjavax swing publicclassJButtonDemo1extendsJFrame publicstaticvoidmain String args newJButtonDemo1 publicJButtonDemo1 super UsingJButton Containercontent getContentPane content setBackground Color white content setLayout newFlowLayout JButtonbutton1 newJButton Java content add button1 ImageIconim newImageIcon images newssms gif JButtonbutton2 newJButton im content add button2 JButtonbutton3 newJButton Java im content add button3 JButtonbutton4 newJButton Java im button4 setHorizontalTextPosition SwingConstants LEFT content add button4 setDefaultCloseOperation JFrame EXIT ON CLOSE pack setVisible true 程序中使用了類IconImage和指定圖標(biāo)圖像文件名來創(chuàng)建圖標(biāo)圖像對(duì)象 程序的運(yùn)行結(jié)果如下圖所示 9 3 3標(biāo)簽 JLabel 標(biāo)簽是用戶不能修改只能查看其內(nèi)容的組件 常用來在界面上輸出信息 JLabel類提供了對(duì)標(biāo)簽的支持 它的類層次關(guān)系為 javax swing JComponent javax swing JLabel JLabel類的構(gòu)造方法有 JLabel 創(chuàng)建一個(gè)空標(biāo)簽 JLabel Iconimage 創(chuàng)建一個(gè)帶指定圖像的標(biāo)簽 JLabel Iconimage inthorizontalAlignment 創(chuàng)建一個(gè)帶指定圖像和水平對(duì)齊方式的標(biāo)簽 JLabel Stringtext 創(chuàng)建一個(gè)帶文字的標(biāo)簽 JLabel Stringtext Iconicon inthorizontalAlignment 創(chuàng)建一個(gè)帶文字 圖像和指定水平對(duì)齊方式的標(biāo)簽 JLabel Stringtext inthorizontalAlignment 創(chuàng)建一個(gè)帶文字和指定水平對(duì)齊方式的標(biāo)簽 其中 horizontalAlignment水平對(duì)齊方式可以使用表示左對(duì)齊 右對(duì)齊 居中對(duì)齊的常量JLabel LEFT JLabel LEFT和JLabel CENTER 例9 11 具有文字對(duì)齊的標(biāo)簽 importjavax swing importjava awt publicclassJLabelAlignDemoextendsJApplet publicvoidinit Containerc getContentPane c add newJLabel 文字左對(duì)齊標(biāo)簽 JLabel LEFT BorderLayout NORTH c add newJLabel 文字右對(duì)齊標(biāo)簽 JLabel RIGHT BorderLayout CENTER c add newJLabel 文字居中標(biāo)簽 JLabel CENTER BorderLayout SOUTH 程序運(yùn)行結(jié)果見下圖 JLabel類常用方法有 publicvoidsetText Stringtext 定義這個(gè)組件將顯示的單行文字 publicStringgetText 返回標(biāo)簽顯示的文字 publicIcongetIcon 返回標(biāo)簽顯示的圖像 publicvoidsetIcon Iconicon 定義這個(gè)組件將顯示的圖標(biāo) 例9 12 使用帶圖標(biāo)的標(biāo)簽 importjavax swing importjava awt importjava awt event publicclassJLabelDemoextendsJApplet publicvoidinit Containerc getContentPane Iconicon newImageIcon images cup gif JLabellabel newJLabel Swing icon JLabel CENTER c add label BorderLayout CENTER 程序運(yùn)行結(jié)果如下圖所示 9 3 4復(fù)選框 JCheckBox JCheckBox類提供復(fù)選框按鈕的支持 復(fù)選框按鈕是具有開關(guān)或真假狀態(tài)的按鈕 JCheckBox類的層次關(guān)系為 javax swing AbstractButton javax swing JToggleButton javax swing JCheckBoxJCheckBox類的構(gòu)造方法如下 JCheckBox 創(chuàng)建無文本的初始未選復(fù)選框按鈕 JCheckBox Iconicon 創(chuàng)建有圖像無文本的初始未選復(fù)選框按鈕 JCheckBox Iconicon booleanselected 創(chuàng)建帶圖像和選擇狀態(tài)但無文本的復(fù)選框按鈕 JCheckBox Stringtext 創(chuàng)建帶文本的初始未選復(fù)選框按鈕 JCheckBox Stringtext booleanselected 創(chuàng)建具有指定文本和狀態(tài)的復(fù)選框按鈕 JCheckBox Stringtext Iconicon 創(chuàng)建具有指定文本和圖標(biāo)圖像的初始未選復(fù)選框按鈕 JCheckBox Stringtext Iconicon booleanselected 創(chuàng)建具有指定文本 圖標(biāo)圖像 選擇狀態(tài)的復(fù)選框按鈕 其中 構(gòu)造方法的參數(shù)selected若為真 則表示按鈕初始狀態(tài)為選中 JCheckBox類常用的方法有繼承來的方法isSelected 其格式為 publicbooleanisSelected 當(dāng)復(fù)選框按鈕選中時(shí)返回true 否則返回false JCheckBox類的選擇事件是ItemEvent 可實(shí)現(xiàn)ItemListener監(jiān)聽器接口的itemStateChanged 方法來處理事件 用addItemListener 方法注冊(cè) 例9 13 選擇粗體 斜體復(fù)選框按鈕 改變文本框中顯示文字的字形 importjavax swing importjava awt event importjava awt publicclassJCheckBoxDemoextendsJappletimplementsItemListener privateJTextFieldt privateJCheckBoxbold italic publicvoidinit t newJTextField 觀察這里文字字形的變化 40 t setFont newFont Serif Font PLAIN 20 getContentPane add t BorderLayout NORTH bold newJCheckBox 粗體Bold bold addItemListener this getContentPane add bold BorderLayout CENTER italic newJCheckBox 斜體Italic italic addItemListener this getContentPane add italic BorderLayout SOUTH publicvoiditemStateChanged ItemEvente intb bold isSelected Font BOLD Font PLAIN inti italic isSelected Font ITALIC Font PLAIN t setFont newFont Serif b i 20 程序運(yùn)行結(jié)果如下圖所示 9 3 5單選按鈕 JRadioButton 在一組單選按鈕中 可進(jìn)行選擇其中一個(gè)的操作 即進(jìn)行 多選一 JRadioButton類的類層次和構(gòu)造方法的參數(shù)構(gòu)成都與前面介紹的JCheckBox類相同 這里不再列出JRadioButton類的這些內(nèi)容 因?yàn)閱芜x按鈕是在一組按鈕中選擇一個(gè) 因此 必須將單選按鈕分組 即指明在一個(gè)組中包含哪些按鈕 可用ButtonGroup創(chuàng)建按鈕組對(duì)象 應(yīng)用對(duì)象的add 方法順序加入各個(gè)單選按鈕 在單選按鈕中也可以使用HTML代碼 這是JavaSDK1 3版新增的功能 單選按鈕的選擇事件是ActionEvent類事件 例9 14 使用單選按鈕來設(shè)置Swing應(yīng)用程序的不同觀感 importjava awt importjava awt event importjavax swing publicclassJRadioButtonDemoextendsJPanel staticJFrameframe staticStringmetal Metal staticStringmotif Motif staticStringwindows Windows JRadioButtonmetalButton motifButton windowsButton publicJRadioButtonDemo JButtonbutton newJButton Hello world button setMnemonic h metalButton newJRadioButton metal metalButton setMnemonic o metalButton setActionCommand metal motifButton newJRadioButton motif motifButton setMnemonic m motifButton setActionCommand motif windowsButton newJRadioButton windows windowsButton setMnemonic w windowsButton setActionCommand windows 將單選按鈕設(shè)置為一組ButtonGroupgroup newButtonGroup group add metalButton group add motifButton group add windowsButton 對(duì)單選按鈕設(shè)置監(jiān)聽器RadioListenermyListener newRadioListener metalButton addActionListener myListener motifButton addActionListener myListener windowsButton addActionListener myListener add button add metalButton add motifButton add windowsButton ActionListener監(jiān)聽器監(jiān)聽單選按鈕 classRadioListenerimplementsActionListener 嵌套類publicvoidactionPerformed ActionEvente if e getActionCommand equals metal SetLAF setJavaLookAndFeel elseif e getActionCommand equals motif SetLAF setMotifLookAndFeel elseSetLAF setNativeLookAndFeel SwingUtilities updateComponentTreeUI frame frame pack publicstaticvoidmain Strings JRadioButtonDemopanel newJRadioButtonDemo frame newJFrame 使用JRadioButton選擇觀感 frame setDefaultCloseOperation JFrame EXIT ON CLOSE frame getContentPane add Center panel frame pack frame setVisible true 程序運(yùn)行時(shí)可用單選按鈕選擇三種不同的觀感 運(yùn)行結(jié)果如下圖上 中和下所示 例9 14程序運(yùn)行時(shí)選擇不同單選按鈕的界面 9 3 6文本框 JTextField JPassWord和JTextArea Java語言提供了單行文本框 口令框和多行文本框等文本框形式 它們都是人機(jī)交互的主要組件 1 單行文本框 JTextField 單行文本框一般- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- Java 圖形 用戶 界面設(shè)計(jì)
鏈接地址:http://www.3dchina-expo.com/p-6359943.html