Java圖形用戶界面設計.ppt
《Java圖形用戶界面設計.ppt》由會員分享,可在線閱讀,更多相關《Java圖形用戶界面設計.ppt(141頁珍藏版)》請在裝配圖網上搜索。
第9章圖形用戶界面 GUI 設計 9 1圖形用戶界面設計概述 9 1 1GUI支持包和簡單GUI程序例1 java awt包Java語言在java awt包中提供了大量地進行GUI設計所使用的類和接口 包括繪制圖形 設置字體和顏色 控制組件 處理事件等內容 AWT是Java語言進行GUI程序設計的基礎 2 javax swing包Swing包是Java基礎類庫 JavaFoundationClasses JFC 的一部分 Swing提供了從按鈕到可分拆面板和表格的所有組件 Swing組件是Java語言提供的第二代GUI設計工具包 它以AWT為基礎 在AWT內容的基礎上新增或改進了一些GUI組件 使得GUI程序功能更強大 設計更容易 更方便 Swing 是開發(fā)新組件的項目代碼名 現(xiàn)在 這個名字常用來引用新組件和相關的API AWT組件和對應的Swing組件 從名稱上很容易記憶和區(qū)別 例如 AWT的框架類 面板類 按鈕類和菜單類 被命名為Frame Panel Button和Menu 而Swing對應的組件類被命名為JFrame JPanel JButton和JMenu 與AWT組件相比 Swing組件的名前多一個 J 字母 另外 AWT組件在java awt包中 而Swing組件在javax swing包中 3 一個JavaGUI簡單程序 例9 1 一個簡單的SwingGUI應用程序 在一個框架窗口中顯示兩個標簽和一個按鈕 上面的標簽顯示一串固定的文字信息 選擇按鈕后在下面的標簽上顯示系統(tǒng)現(xiàn)在的時間 importjava awt importjava awt event importjavax swing importjava util 繼承JFrame類并實現(xiàn)ActionListener接口publicclassSwingDemoextendsJFrameimplementsActionListener JButtonb1 聲明按鈕對象JLabell1 l2 聲明標簽對象 SwingDemo 定義構造方法super Swing應用程序的例 調用父類的構造方法l1 newJLabel 一個GUI應用程序的例子 JLabel CENTER 定義標簽 文字居中l(wèi)2 newJLabel 定義無文字標簽b1 newJButton 現(xiàn)在時間 T 定義按鈕b1 setMnemonic KeyEvent VK T 設置按鈕的快捷鍵b1 setActionCommand time 設置控制名b1 addActionListener this 注冊按鈕事件add l1 BorderLayout NORTH 添加標簽l1add l2 BorderLayout CENTER 添加標簽l2add b1 BorderLayout SOUTH 添加標簽b1 對按鈕引發(fā)事件編程publicvoidactionPerformed ActionEvente 捕獲按鈕事件Calendarc1 Calendar getInstance 獲取系統(tǒng)日期和事件if e getActionCommand equals time 判斷是否為所需的按鈕事件l2 setText 現(xiàn)在時間是 c1 get Calendar HOUR OF DAY 時 c1 get Calendar MINUTE 分 設置標簽文字l2 setHorizontalAlignment JLabel CENTER 設置標簽標簽文字居中對齊 elseSystem exit 0 publicstaticvoidmain Stringargs 主方法JFrame setDefaultLookAndFeelDecorated true 加此語句顯示為運行結果圖的右圖JFrameframe newSwingDemo 創(chuàng)建JFrame對象 初始不可見frame setDefaultCloseOperation JFrame EXIT ON CLOSE 設置框架關閉按鈕事件frame pack 壓縮框架的顯示區(qū)域frame setVisible true 顯示框架主窗口 程序運行后顯示的形式如下圖 JavaSwingGUI應用程序中的基本代碼如下 1 引入合適的包和類一般的SwingGUI應用程序應包含程序中的前三個引入語句 它們分別表示引入awt包 awt事件處理包和swing包 其他包按需引入 由于Swing組件使用AWT的結構 包括AWT的事件驅動模式 所以 使用swing組件的程序一般需要使用awt包 2 使用缺省的觀感或設置自己的觀感 LookandFeel 3 設置一個頂層的容器 4 根據需要 使用缺省的布局管理器或設置另外的布局管理器 5 定義組件并將它們添加到容器 6 對組件或事件編碼 9 1 2容器 組件 布局和觀感1 容器 Container 和組件 Component 一個Java的圖形用戶界面的最基本元素是組件 組件是可以以圖形化的方式顯示在屏幕上并能與用戶進行交互的對象 如一個按鈕 一個文本框等 在Java語言中 通常將組件放在一定的容器內使用 容器實際上是一種具有容納其他組件和容器的功能的組件 抽象類Container是所有容器的父類 其中包含了很多有關容器的功能和方法 而類Container又是Java語言的組件類Component的子類 2 布局管理器 LayoutManager 為了使得圖形用戶界面具有良好的平臺無關性 在Java語言中提供了布局管理器這個工具來管理組件在容器中的布局 而不使用直接設置組件位置和大小的方式 容器中的組件定位由布局管理器決定 每個容器都有一個缺省的布局管理器 當容器需要對某個組件進行定位或判斷其大小尺寸時 就會調用其相應的布局管理器 但也可以不用缺省的布局管理器 在程序中指定其新的布局管理器 Java平臺提供多種布局管理器 常用的有FlowLayout BorderLayout GridLayout CardLayout BoxLayout和GridBagLayout等 使用不同的布局管理器 組件在容器上的位置和大小都是很不一樣的 在程序中安排組件的位置和大小時 應該注意 1 容器中的布局管理器負責各個組件的大小和位置 因此用戶無法在這種情況下直接設置這些屬性 若試圖使用Java語言提供的setLocation setSize setBounds 等方法 則都會被布局管理器覆蓋 2 若用戶確實需要親自設置組件的位置和大小 則應取消該容器的布局管理器 方法為 setLayout null 隨后 用戶必須使用setLocation setSize setBounds 等方法為組件設置大小和位置 但這種方法將會導致程序的系統(tǒng)相關 在一個GUI應用程序的界面上 除了可以見到上述的標準GUI元素外 還可以見到一些非交互的起到裝飾 美化界面的作用的幾何圖形 圖案 圖像等內容 3 觀感 LookandFeel Javaswing的一個重要特征是它的可插入的 觀感 體系 一個Swing應用程序或一個最終用戶可指明所需要的觀感 使得Swing應用程序的外觀和行為都可以被定制 Swing運行一個缺省的Java觀感 也稱為Metal觀感 還實現(xiàn)了模仿Motif和Windows的觀感 這樣 一個Swing程序可擁有Java程序的獨特外觀 也可以擁有熟悉的Windows操作系統(tǒng)外觀 在本章稍后部分的單選按鈕的程序例中分別顯示了Windows Motif和Metal三種不同風格的觀感 一般在應用程序的JFrame的構造方法中或在JApplet的init 方法中進行觀感的設置 例9 2 設置觀感 importjavax swing importjava awt publicclassSetLAF publicstaticvoidsetNativeLookAndFeel try UIManager setLookAndFeel UIManager getSystemLookAndFeelClassName catch Exceptione System out println 設置nativeLAF錯誤 e publicstaticvoidsetJavaLookAndFeel try UIManager setLookAndFeel UIManager getCrossPlatformLookAndFeelClassName catch Exceptione System out println 設置JavaLAF錯誤 e publicstaticvoidsetMotifLookAndFeel try UIManager setLookAndFeel com sun java swing plaf motif MotifLookAndFeel catch Exceptione System out println 設置MotifLAF錯誤 e 因為setLookAndFeel 方法拋出異常 因此設置觀感的代碼應捕捉異常 本例創(chuàng)建的類SetLAF可在以后的程序中設置觀感時使用 9 1 3事件處理在一個GUI程序中 為了能夠接收用戶的輸入 命令的按鍵和鼠標操作 程序系統(tǒng)首先應該能夠識別這些操作并做出相應的響應 通常一個鍵盤和鼠標操作將引發(fā)一個系統(tǒng)預先定義好的事件 用戶程序只要編寫代碼定義每個事件發(fā)生時程序應做出何種響應即可 這些代碼會在它們對應的事件發(fā)生時由系統(tǒng)自動調用 這就是GUI程序中事件和事件響應的基本原理 在Java語言中 除了鍵盤和鼠標操作 系統(tǒng)的狀態(tài)改變也可以引發(fā)事件 可能產生事件的組件稱為事件源 不同事件源上發(fā)生的事件種類是不同的 若希望事件源上引發(fā)的事件被程序處理 需要將事件源注冊給能夠處理該事件源上那種事件類型的監(jiān)聽器 監(jiān)聽器具有監(jiān)聽和處理某類事件的功能 它可以是包容事件源的容器 也可以是另外的對象 也就是說 事件源和事件處理是分開的 一般組件都不處理自己的事件 而將事件處理委托給外部的處理實體 這種事件處理模型稱為授權處理模型 事件的行為多種多樣 由不同的監(jiān)聽器處理 編寫事件處理程序首先應確定關注的事件屬于何種監(jiān)聽器類型 在AWT中 提供11種標準的監(jiān)聽器類型 見下表 監(jiān)聽器適配器類注冊方法ActionListeneraddActionListenerAdjustmentListeneraddAdjustmentListenerComponentListenerComponentAdapteraddComponentListenerContainerListenerContainerAdapteraddContainerListenerFocusListenerFocusAdapteraddFocusListenerItemListeneraddItemListenerKeyListenerKeyAdapteraddKeyListenerMouseListenerMouseAdapteraddMouseListenerMouseMotionListenerMouseMotionAdapteraddMouseMotionListenerTextListeneraddTextListenerWindowListenerWindowAdapteraddWindowListener 在確定監(jiān)聽器類型后 要用事件源類的注冊方法來注冊一個監(jiān)聽器類的對象 這樣 事件源產生的事件會傳送給已注冊的處理該類事件的監(jiān)聽器對象 該對象將自動調用相應的事件處理方法來處理該事件 具體的注冊方法是 用監(jiān)聽器類的對象作為參數調用事件源本身的addXxxListener 方法 該方法的參數是一個監(jiān)聽器類的對象 有多種形式 例如 1 分離的監(jiān)聽器類 該類通常為繼承相應事件適配器類的子類 類中包含了事件處理方法 參數是該類的一個對象 2 實現(xiàn)監(jiān)聽器接口 參數為this 表示本對象就是一個監(jiān)聽器類的對象 在本類中包含事件處理方法 3 有名內部類 參數形式為繼承事件適配器類的子類對象 在子類中包含事件處理方法 4 匿名內部類 參數形式為用new開始的一個無名的類定義 其中包含事件處理方法 9 2布局管理器 在容器中所有組件的布局 位置和大小 由布局管理器來控制 在Java語言中提供了FlowLayout BorderLayout GridLayout CardLayout和GridBagLayout等多種布局管理器 每種容器都有自己缺省的布局管理器 缺省地 JPanel使用FlowLayout 而內容窗格ContentPane JApplet JDialog和JFrame對象的主容器 使用BorderLayout 如果不希望使用缺省的布局管理器 則可使用所有容器的父類Container的setLayout 方法來改變缺省的布局管理器 1 FlowLayoutFlowLayout布局是一種最基本的布局 這種布局指的是把組件一個接一個從左至右 從上至下地依次放在容器上 每一行中的組件缺省為居中對齊 當容器的尺寸改變后 組件的大小不變 但布局將會隨之變化 FlowLayout是Applet和JPanel的缺省布局管理器 FlowLayout類的構造方法如下 FlowLayout 創(chuàng)建每行組件對齊方式為居中對齊 組件間距為5個像素單位的對象FlowLayout intalign 創(chuàng)建指定每行組件對齊方式 組件間距為5個像素單位的對象 align可取三個靜態(tài)常量LEFT CENTER和RIGHT之一 分別表示左 中 右對齊方式 FlowLayout intalign inthgap intvgap 創(chuàng)建指定每行組件對齊方式的對象 該對象也使用參數vgap和hgap指定了組件間的以像素為單位的縱橫間距 向使用FlowLayout布局的容器添加組件可簡單地使用下面的語句 add 組件名 2 BorderLayoutBorderLayout是內容窗格的缺省布局管理器 內容窗格是框架JFrame 小程序JApplet和對話框JDialog的主容器 BorderLayout將容器的布局分為五個區(qū) 北區(qū) 南區(qū) 東區(qū) 西區(qū)和中區(qū) 這幾個區(qū)的分布規(guī)律是 上北下南 左西右東 當容器的大小改變時 容器中的各個組件相對位置不變 其中間部分組件的尺寸會發(fā)生變化 四周組件寬度固定不變 BorderLayout類的構造方法如下 BorderLayout 創(chuàng)建組件間無間距的BorderLayout對象 BorderLayout inthgap intvgap 創(chuàng)建有指定組件間距的對象 向BorderLayout布局的容器添加組件時 每添加一個組件都應指明該組件加在哪個區(qū)域中 add 方法的第二個參數指明加入的區(qū)域 區(qū)域東南西北中可用五個靜態(tài)常量表示 BorderLayout EAST BorderLayout SOUTH BorderLayout WEST BorderLayout NORTH和BorderLayout CENTER 例9 3 將五個按鈕加入BorderLayout的五個區(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 程序運行的結果見下圖 3 GridLayoutGridLayout布局是將容器的空間分成若干行和列的一個個網格 可以給出網格的行數和列數 組件添加到這些網格中 當改變容器的大小后 其中的組件相對位置不變 但大小改變 容器中各個組件同高度 同寬度 各個組件缺省的排列方式為 從上到下 從左到右 GridLayout類的構造方法如下 publicGridLayout 創(chuàng)建單行每個組件一列的GridLayout對象 publicGridLayout introws intcols 創(chuàng)建指定行列數的GridLayout對象 publicGridLayout introws intcols inthgap intvgap 創(chuàng)建指定行列數的GridLayout對象 因為沒有容器缺省使用GridLayout 因此在使用GridLayout前 要用setLayout 方法將容器的布局管理器設置為GridLayout 在向GridLayout添加組件時 組件加入容器要按序進行 每個網格中都必須加入組件 若希望某個網格為空 可以為該網格加入一個空的標簽 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布局管理器能夠使得多個組件共享同一顯示空間 這些組件之間的關系像一疊重疊的撲克牌 只有最上面的組件是可見的 注意 在一個顯示空間 卡片 中只能顯示一個組件 因此 可使用容器嵌套的方法來顯示多個組件 例9 4運行的結果如下圖所示 CardLayout類的構造方法如下 CardLayout 創(chuàng)建間距為零的對象 CardLayout inthgap intvgap 創(chuàng)建帶有水平hgap和垂直vgap間距的對象 為了使用疊在下面的組件 可以為每個組件取一名字 名字在用add 方法向容器添加組件時指定 需要某個組件時通過show 方法指定該組件的名字來選取它 也可以順序使用這些組件 或直接指明選取第一個組件 用first 方法 或最后一個組件 用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 程序運行結果如下圖所示 程序中的三個按鈕組件順序添加到卡片布局管理器的各個卡片上 它們共享同一顯示區(qū)域 因此只能見到最上面的 卡片一 按鈕 5 GridBagLayoutGridBagLayout是最復雜也最靈活的布局管理器 這個布局管理器將組件放入單元格中 但允許一些組件跨越單元格 可用GridBagLayout類的構造方法GridBagLayout 來創(chuàng)建一個GridBagLayout布局管理器 因GridBagLayout布局設置比較復雜 這里就不介紹了 請讀者參看API說明或其他資料 6 自定義布局 若希望按照自己的要求來進行組件和界面圖形元素的布局 可用容器的setLayout null 方法將容器的布局管理器設置為空 然后用下面的方法設置組件在容器中的位置和大小 setBounds inta intb intwidth intheight 其中 參數a和b指定矩形形狀的組件左上角在容器中的坐標 width和height指定組件的寬和高 例9 6 設置自己的布局管理器 importjava awt importjavax swing classNullLayoutextendsJFrame NullLayout super 建設自己的布局管理器 Containerc getContentPane 也可不用內容窗格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 程序的運行結果如下圖所示 注意 采用這種方式的布局 組件的位置和大小將不隨窗口大小的變化而變化 下圖為例9 6的運行界面 9 3常用Swing組件 9 3 1容器組件1 JFrame框架框架 是JFrame類的對象 是swingGUI應用程序的主窗口 窗口有邊界 標題 關閉按鈕等 對Java應用程序 應至少包含一個框架 例9 1的應用程序即使用了框架 有時 小程序也使用框架 JFrame類繼承于Frame類 JFrame類的構造方法如下 JFrame 創(chuàng)建無標題的初始不可見框架 JFrame Stringtitle 創(chuàng)建標題為title的初始不可見框架 例如 創(chuàng)建帶標題 JavaGUI應用程序 的框架對象frame 可用語句 JFrameframe newJFrame JavaGUI應用程序 要顯示框架對象代表的框架窗口 可使用方法setVisible 可用語句 frame setVisible true 可使得JFrame類對象frame表示的框架窗口顯示到屏幕上 一般在顯示框架前 可設置框架的初始顯示大小可使用setSize 方法或pack 方法 例如 frame setSize 200 150 設置框架窗口初始大小為200 150點frame pack 設置框架窗口初始大小為剛好只顯示出所有的組件 在向框架添加組件時 并不直接添加組件到框架 而是添加到內容窗格 contentpane 改變其他特性 布局管理器 背景色等 也對內容窗格進行 要存取內容窗格 可通過getContentPane 方法 若希望用自己的容器替換掉內容窗格 例如用JPanel 可以使用setContentPane 方法 選擇框架的關閉按鈕后 框架窗口將自動關閉 但若是應用單個框架的應用程序 為了在選擇框架的關閉按鈕時能退出程序 應添加WindowListener監(jiān)聽器或書寫下列代碼 frame setDefaultCloseOperation JFrame EXIT ON CLOSE JFrame的缺省觀感為Java Metal 若要使用其他的觀感 必須顯式設置 JFrame 應該說是內容窗格 的缺省布局管理器是BorderLayout 2 JPanel面板JPanel是一種添加到其他容器使用的容器組件 可將組件添加到JPanel 然后再將JPanel添加到某個容器 JPanel也提供一個繪畫區(qū)域 可代替AWT的畫布Canvas 沒有JCanvas javax swing JPanel類繼承于javax swing JComponent類 其構造方法有 publicJPanel 創(chuàng)建具有缺省FlowLayout布局的JPanel對象 publicJPanel LayoutManagerlayout 創(chuàng)建具有指定布局管理器的JPanel對象 將JPanel作為畫布的繪畫區(qū)域使用時 要使用下面的兩個步驟 首先 設置畫布繪圖區(qū)域的大小 其次 使用paintComponent 方法 不是paint 方法 來繪圖 在該方法體中 首先調用方法super paintComponent 來清除顯示區(qū)域 例如 publicvoidpaintComponent Graphicsg super paintComponent g JPanel可指定邊界 可用的邊界有titled etched beveled line matte compound和empty等 也可以創(chuàng)建自己的邊界 可用JComponent類的setBorder 方法設置邊界 其用法如下 publicvoidsetBorder Borderborder 其中 Border類的參數可用javax swing BorderFactory類中的方法獲得 獲取各種相應邊界的方法為 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程序運行結果如下圖所示 3 JAppletjavax swing JApplet類是java applet Applet類的子類 使用Swing組件的小程序需繼承JApplet類 除了所處的java包不同外 JApplet與Applet的主要區(qū)別還有 1 缺省的布局管理器不同Applet缺省的布局管理器是FlowLayout 而JApplet 內容窗格 缺省的布局管理器是BorderLayout 2 加入組件的方式不同Applet可直接加入組件 而JApplet缺省使用內容窗格ContentPane作為主容器 加入Swing組件時 要先使用JApplet的方法getContentPane 獲得一個Container對象 再調用這個對象的add 方法將Swing組件加入到JApplet的容器中 4 JTabbedPanejavax javax swing JTabbedPane類繼承于javax swing JComponent 它的對象反映為一組帶標簽的面板 每個面板都可以存放組件 因此JTabbedPane是一容器組件 JTabbedPane類的構造方法有 JTabbedPane 創(chuàng)建空對象 該對象具有缺省的標簽位置JTabbedPane TOP和缺省的布局策略JTabbedPane WRAP TAB LAYOUT JTabbedPane inttabPlacement 創(chuàng)建空對象 該對象具有指定的標簽位置 JTabbedPane TOP JTabbedPane BOTTOM JTabbedPane LEFT或JTabbedPane RIGHT以及缺省的布局策略JTabbedPane WRAP TAB LAYOUT JTabbedPane inttabPlacement inttabLayoutPolicy 創(chuàng)建空對象 該對象具有指定的標簽位置和布局策略 例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 使用標簽面板容器 jt newJTabbedPane jb newJButton 5 for inti 0 i 5 i jb i newJButton 第 i 頁面板 jb i addActionListener this jt addTab 頁標簽 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 響應單擊 JButton e getSource getText 例9 8運行結果如下圖所示 9 3 2按鈕 JButton 按鈕是GUI中非常重要的一種基本組件 按鈕一般對應一個事先定義好的事件 執(zhí)行功能 一段程序 當使用者單擊按鈕時 系統(tǒng)自動執(zhí)行與該按鈕聯(lián)系的程序 從而完成預定的功能 JButton類提供對按鈕的支持 它的類層次關系如下 java awt Container javax swing JComponent javax swing AbstractButton javax swing JButton JButton類有如下的構造方法 JButton 創(chuàng)建空按鈕 JButton Iconicon 創(chuàng)建帶圖標的按鈕 JButton Stringtext 創(chuàng)建帶文字的按鈕 JButton Stringtext Iconicon 創(chuàng)建帶文字和圖標的按鈕 JButton組件與AWT的Button組件相比 增加了顯示文本中可用HTML標記 可帶圖標等功能 在JButton按鈕的使用中 常用到繼承來的setMnemonic 設置快捷字母鍵 setActionCommand 設置動作命令 方法等 JButton組件引發(fā)的事件為ActionEvent 可實現(xiàn)ActionListener監(jiān)聽器接口的actionPerformed 方法 用addActionListener 方法注冊 用getActionCommand 或getSource 方法確定事件源 例9 9 設計一個GUI應用程序 有兩個標簽l1 l2和三個按鈕b1 b2 b3 l1標簽顯示固定的文字 l2標簽的文字隨選擇不同的按鈕而變化 選擇b1按鈕時 l2標簽顯示為 歡迎進入Java世界 選擇b2按鈕時 l2標簽顯示當前的日期 選擇b3按鈕時 退出該應用程序 程序如下 importjava awt importjava awt event importjavax swing importjava util publicclassJButtonDemoextendsJpanelimplementsActionListener JButtonb1 b2 b3 staticJLabell1 l2 JButtonDemo l1 newJLabel 這是一個演示按鈕動作的程序 JLabel CENTER l2 newJLabel JLabel CENTER b1 newJButton 歡迎 w b1 setMnemonic KeyEvent VK W 設置按鈕的快捷鍵b1 setActionCommand welcome b2 newJButton 日期 d b2 setMnemonic KeyEvent VK D 設置快捷字符為Db2 setActionCommand date b3 newJButton 退出 q b3 setMnemonic KeyEvent VK Q 設置快捷字符為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 歡迎進入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 標簽文字水平居中 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 本程序中命令按鈕設置了快捷字母鍵 可用鼠標單擊或按Alt 快捷字母來選擇按鈕 例9 9運行啟動后選擇 歡迎 按鈕和選擇 日期 按鈕后顯示的情況見下左圖和下右圖 例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和指定圖標圖像文件名來創(chuàng)建圖標圖像對象 程序的運行結果如下圖所示 9 3 3標簽 JLabel 標簽是用戶不能修改只能查看其內容的組件 常用來在界面上輸出信息 JLabel類提供了對標簽的支持 它的類層次關系為 javax swing JComponent javax swing JLabel JLabel類的構造方法有 JLabel 創(chuàng)建一個空標簽 JLabel Iconimage 創(chuàng)建一個帶指定圖像的標簽 JLabel Iconimage inthorizontalAlignment 創(chuàng)建一個帶指定圖像和水平對齊方式的標簽 JLabel Stringtext 創(chuàng)建一個帶文字的標簽 JLabel Stringtext Iconicon inthorizontalAlignment 創(chuàng)建一個帶文字 圖像和指定水平對齊方式的標簽 JLabel Stringtext inthorizontalAlignment 創(chuàng)建一個帶文字和指定水平對齊方式的標簽 其中 horizontalAlignment水平對齊方式可以使用表示左對齊 右對齊 居中對齊的常量JLabel LEFT JLabel LEFT和JLabel CENTER 例9 11 具有文字對齊的標簽 importjavax swing importjava awt publicclassJLabelAlignDemoextendsJApplet publicvoidinit Containerc getContentPane c add newJLabel 文字左對齊標簽 JLabel LEFT BorderLayout NORTH c add newJLabel 文字右對齊標簽 JLabel RIGHT BorderLayout CENTER c add newJLabel 文字居中標簽 JLabel CENTER BorderLayout SOUTH 程序運行結果見下圖 JLabel類常用方法有 publicvoidsetText Stringtext 定義這個組件將顯示的單行文字 publicStringgetText 返回標簽顯示的文字 publicIcongetIcon 返回標簽顯示的圖像 publicvoidsetIcon Iconicon 定義這個組件將顯示的圖標 例9 12 使用帶圖標的標簽 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 程序運行結果如下圖所示 9 3 4復選框 JCheckBox JCheckBox類提供復選框按鈕的支持 復選框按鈕是具有開關或真假狀態(tài)的按鈕 JCheckBox類的層次關系為 javax swing AbstractButton javax swing JToggleButton javax swing JCheckBoxJCheckBox類的構造方法如下 JCheckBox 創(chuàng)建無文本的初始未選復選框按鈕 JCheckBox Iconicon 創(chuàng)建有圖像無文本的初始未選復選框按鈕 JCheckBox Iconicon booleanselected 創(chuàng)建帶圖像和選擇狀態(tài)但無文本的復選框按鈕 JCheckBox Stringtext 創(chuàng)建帶文本的初始未選復選框按鈕 JCheckBox Stringtext booleanselected 創(chuàng)建具有指定文本和狀態(tài)的復選框按鈕 JCheckBox Stringtext Iconicon 創(chuàng)建具有指定文本和圖標圖像的初始未選復選框按鈕 JCheckBox Stringtext Iconicon booleanselected 創(chuàng)建具有指定文本 圖標圖像 選擇狀態(tài)的復選框按鈕 其中 構造方法的參數selected若為真 則表示按鈕初始狀態(tài)為選中 JCheckBox類常用的方法有繼承來的方法isSelected 其格式為 publicbooleanisSelected 當復選框按鈕選中時返回true 否則返回false JCheckBox類的選擇事件是ItemEvent 可實現(xiàn)ItemListener監(jiān)聽器接口的itemStateChanged 方法來處理事件 用addItemListener 方法注冊 例9 13 選擇粗體 斜體復選框按鈕 改變文本框中顯示文字的字形 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 程序運行結果如下圖所示 9 3 5單選按鈕 JRadioButton 在一組單選按鈕中 可進行選擇其中一個的操作 即進行 多選一 JRadioButton類的類層次和構造方法的參數構成都與前面介紹的JCheckBox類相同 這里不再列出JRadioButton類的這些內容 因為單選按鈕是在一組按鈕中選擇一個 因此 必須將單選按鈕分組 即指明在一個組中包含哪些按鈕 可用ButtonGroup創(chuàng)建按鈕組對象 應用對象的add 方法順序加入各個單選按鈕 在單選按鈕中也可以使用HTML代碼 這是JavaSDK1 3版新增的功能 單選按鈕的選擇事件是ActionEvent類事件 例9 14 使用單選按鈕來設置Swing應用程序的不同觀感 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 將單選按鈕設置為一組ButtonGroupgroup newButtonGroup group add metalButton group add motifButton group add windowsButton 對單選按鈕設置監(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 程序運行時可用單選按鈕選擇三種不同的觀感 運行結果如下圖上 中和下所示 例9 14程序運行時選擇不同單選按鈕的界面 9 3 6文本框 JTextField JPassWord和JTextArea Java語言提供了單行文本框 口令框和多行文本框等文本框形式 它們都是人機交互的主要組件 1 單行文本框 JTextField 單行文本框一般- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- Java 圖形 用戶 界面設計
裝配圖網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
鏈接地址:http://m.jqnhouse.com/p-6359943.html