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