版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Java圖形用戶界面設計Javagraphicaluserinterfacedesign第九章目標/OBJECTIVE01理解GUI設計的基本原則02掌握Java中的GUI組件03掌握容器的概念04熟練使用各個布局管理器05熟悉GUI事件處理06創(chuàng)造具有創(chuàng)意和個性的界面01AWT和Swing9.1AWT和SwingJava中的AWT和Swing都為GUI提供了組件。在GUI設計中,組件是構建用戶界面的基本元素,可以是可見的用戶界面元素或用于處理用戶輸入和操作的控件。組件通常包括各種用戶界面元素,如按鈕、文本框、標簽、下拉框、滑塊等。9.1AWT和Swing102容器9.2容器圖形用戶界面都是由組件構成,例如文本輸入框(Textfield)、按鈕(Button)、標簽(Label)等都是組件,其中一種特殊的組件叫做容器(Container),例如框架(Frame)、面板(Panel)等都是容器。容器可以理解為一種界面布局的機制,它允許開發(fā)者以一定的方式將其他組件放置在其中,以便更好地組織和管理用戶界面的布局結構。所有在屏幕上顯示的組件都必須包含在某個容器中,并且可以在嵌套的容器結構中組織。在這個層次結構的最外層,必須是一個頂層容器。頂層容器就像廚房中的烹飪鍋一樣,幾乎所有的食材都要通過烹飪鍋進行烹飪。在Swing中,有四種頂層容器,分別是JFrame、JApplet、JDialog和JWindow。9.2容器·JFrame(框架)是一個帶有標題欄、控制按鈕(最小化、恢復/最大化、關閉)的獨立窗口,適用于創(chuàng)建包含完整應用程序的窗口界面。·JApplet(小應用程序)用于創(chuàng)建小型應用程序,它可以被包含在瀏覽器窗口中,通常用于創(chuàng)建網(wǎng)頁上的Java小程序?!Dialog(對話框)用于創(chuàng)建對話框,它是一個彈出窗口,通常用于與用戶進行交互,接受輸入或顯示信息。·JWindow(窗口)是一個不帶有標題欄和控制按鈕的窗口,通常很少使用,但在特定情況下可以用于創(chuàng)建不帶邊框的窗口。這些頂層容器提供了不同的外觀和功能,使開發(fā)者能夠選擇最適合其應用程序需求的容器類型。使用JFrame創(chuàng)建完整的應用程序窗口,JApplet用于小型應用程序,JDialog創(chuàng)建對話框,而JWindow則適用于一些不需要標題和按鈕的簡單窗口場景。在Swing應用程序中,選擇適當?shù)捻攲尤萜鲗τ跇嫿ㄓ脩粲押玫慕缑嬷陵P重要。用烹飪來比喻,頂層容器就是最大的烹飪鍋或者是技術最頂尖的廚師烹飪。9.2容器使用JFrame生成一個用戶登入界面,包括賬號和密碼輸入與小字部分的忘記密碼按鈕,要求有賬號與密碼的字樣。例題9.1QQ登入界面創(chuàng)建窗口用到的JFrame和JButton是定義在javax.swing包中的,而在面板上創(chuàng)建網(wǎng)格布局的布局管理器GridLayout則定義在java.awt包中,定義在java.awt.event的ActionEvent和ActionListener類被用于處理按鈕的點擊事件,因此分別引入了這四個包。第一行設置窗口的標題,將窗口的標題文本設置為“UserLogin”。這個標題通常會顯示在窗口的標題欄上。第二行設置窗口的默認關閉操作。JFrame.EXIT_ON_CLOSE表示在用戶關閉窗口時,默認的操作是終止應用程序。即當用戶點擊窗口的關閉按鈕時,程序將結束運行。第三行設置窗口的大小。窗口的寬度設置為300像素,高度設置為200像素。這決定了窗口的初始尺寸。第四行設置窗口相對于指定組件的位置。null表示窗口將在屏幕的中央打開。如果提供了一個組件,窗口將相對于該組件的位置進行調整。9.2容器
上兩行代碼創(chuàng)建了一個新的JPanel對象,即一個面板。JPanel是Swing庫中的容器組件,用于包含和組織其他GUI元素。還設置了面板的布局管理器為GridLayout,并指定了網(wǎng)格的行數(shù)和列數(shù)。GridLayout是一種布局管理器,它將組件按照指定的行數(shù)和列數(shù)排列成網(wǎng)格狀結構。在這里,newGridLayout(3,2)表示將面板分為3行2列的網(wǎng)格,即最多可以容納3行*2列=6個組件下幾行的第一行代碼創(chuàng)建了一個標簽對象(JLabel),用于顯示用戶輸入用戶名的文本。標簽是一種用于顯示簡短文本或圖像的組件。在這里,標簽文本為“Username:”。第二行代碼創(chuàng)建了一個文本輸入框對象(JTextField),用于用戶輸入用戶名。JTextField是一個單行的文本輸入框,用戶可以在其中輸入文本。第三行代碼創(chuàng)建了另一個標簽對象,用于顯示用戶輸入密碼的文本。標簽文本為“Password:”。第四代碼創(chuàng)建了一個密碼輸入框對象(JPasswordField),用于用戶輸入密碼。JPasswordField與JTextField類似,但它隱藏了用戶輸入的字符,以增加密碼的安全性。9.2容器
上幾行代碼就是把usernameLabel、usernameField、passwordLabel和passwordField添加到面板JPanelpanel中。下兩行代碼就是設置兩個Login和ForgotPassword按鈕。后面的代碼就是創(chuàng)建兩個事件監(jiān)聽器ActionListener給Login和ForgotPassword兩個按鈕,以便在用戶點擊登錄按鈕時執(zhí)行相應的操作。9.2容器
內容窗格(ContentPane)是在GUI設計中用于容納應用程序主要內容的特殊區(qū)域。類似廚房中特殊的區(qū)域,比如案板,所有的食材必須集中在這里。拿房間的例子來分析的話,容器就是房間本身,而內容窗格就是房間中的各種各樣的家具等等東西。在Swing中,JFrame類的實例默認包含一個內容窗格,這是用于存放主要用戶界面組件的地方。默認情況下,JFrame的內容窗格可以通過getContentPan()方法訪問。在早期版本的Swing中,JFrame的構造函數(shù)會返回其內容窗格,但在較新的版本中,這已被廢棄,推薦使用getContentPane()方法。將組件放入內容窗格中有兩種方法,一種是使用頂層容器getContentPane()方法獲得默認的內容窗格,然后將組件添加到內容窗格中,例如:9.2容器上面兩條代碼也可合并為一條:另一種方法是創(chuàng)建一個新的內容窗格,以替代頂層容器默認的內容窗格。通常的做法是創(chuàng)建一個JPanel的實例,然后將組件添加到JPanel實例中。接著,通過頂層容器的setContentPane()方法,將JPanel實例設置為新的內容窗格。這樣可以更靈活地控制和組織界面的布局,允許開發(fā)者在內容窗格中添加自定義的組件和定制化布局。例如:9.2容器運用內容窗格的知識點,創(chuàng)建一個游戲的主頁面要求界面大小覆蓋全屏幕,包括開始游戲、你的背包、任務、設置和退出按鈕,全部按鈕位于屏幕正中間。例題9.2游戲主頁面設計9.2容器9.2容器9.2容器在圖形用戶界面設計中,面板(Panel)是一種容器組件,用于組織和管理其他GUI元素。面板通常是輕量級的,它提供了一種結構化的方式來布置和排列其他組件,例如按鈕、文本框、標簽等。面板就像是房間中的書桌,與按鈕、文本框、標簽等“文具”組成學習辦公區(qū)這個特定的結構,它可以更好的設計界面結構。利用JFrame和面板知識點生成一個灰色面板,文本為敲木魚功德+1,使用Java的Java2D庫添加木魚形狀的按鈕。例題9.3電子木魚9.2容器9.2容器9.2容器03
布局9.3布局圖形用戶界面設計中包含了很多不同種容器,而不同的中又包含了很多不同的組件,過多的組件就會帶來組件間如何放置的問題。為了解決這個問題,就引申了布局的這個概念。每個組件的布局,包括組件的位置與大小,通常由布局管理器負責安排。在默認的情況下,每個容器都有一個默認的布局管理器,還可以通過容器的setLayout()方法改變容器中的布局管理器。在房間設計中,布局管理器就是房間中家具等東西擺放的位置方案。Java中有很多布局管理器,例如FlowLayout、BorderLayout、GridLayout、GridBagLayout、BoxLayout、CardLayout等等。后續(xù)的學習將逐個進行介紹。9.3布局FlowLayout為流式布局管理器。采用流式布局管理器的容器會將內部組件按照添加的順序從左到右、從上到下放置,當一行放不下時自動換行,默認情況下組件在一行中按居中對齊的方式排列。FlowLayout布局管理器有三種構造方法:?FlowLayout():創(chuàng)建一個默認居中對齊、水平和垂直間距為5像素的流式布局管理器。?FlowLayout(intalignment):創(chuàng)建一個制定對齊方式、水平和垂直間距為5像素的流式布局管理器。且參數(shù)alignment有以下三種取值。FlowLayout.LEFT:表示每一行的組件都左對齊,也可以用0代替。FlowLayout.CENTER:表示每一行組件都居中對齊,也可以用1代替。FlowLayout.RIGHT:表示每一行的組件都右對齊,也可以用2代替。?FlowLayout(intalignment,inthgap,intvgap):創(chuàng)建一個對齊方式為alignment、水平間距為hgap、垂直間距為vgap像素的流式布局管理器。FlowLayout布局管理器與其他布局管理器不同的是它不強行設定組件的大小,而是允許各個組件取得希望的大小。并且每個組件都有一個getPreferredSize()方法,容器的布局管理器會調用這個方法取得每個組件的希望大小。19.3布局BorderLayout為邊界布局管理器,定義在java.awt包中,將容器劃分為東、南、西、北、中五個區(qū)域,分別對應常量BorderLayout.EAST、BorderLayout.SOUTH、BorderLayout.WEST、BorderLayout.NORTH、BorderLayout.CENTER,它們可以將組件添加到各個區(qū)域中的任意一個區(qū)域中去。使用邊界布局管理器是可以限制各個區(qū)域的邊界的。當改變容器大小時,各個組件的相對應位置是保持不變的。當寬度調整時,區(qū)域北、南和中的寬度同步調整,其他區(qū)域不變。當高度調整時,區(qū)域西、中和東的高度同步調整,其他區(qū)域不變。BorderLayout有兩種構造方法:BorderLayout()、BorderLayout(inthgap,intvgap)。在使用BorderLayout布局管理器后,組件必須使用add()方法加入到容器中的指定區(qū)域中。例如,將按鈕添加到框架的西部的代碼如下所示。9.3布局使用BorderLayout布局管理器將東南西北四個區(qū)域分別對應了EAST、SOUTH、WEST、NORTH四個按鈕,中的區(qū)域對應Enter按鈕。例題9.4東南西北折子9.3布局9.3布局GridLayout為網(wǎng)格式布局管理器,它被定義在java.awt包中,可以把容器的空間分成若干行乘若個列的網(wǎng)格區(qū)域,組件依次添加進入,每個組件占據(jù)一個區(qū)域。GridLayout布局管理器有三種構造方法,如下所示。?GridLayout():創(chuàng)建一個只有一行的網(wǎng)格。?GridLayout(introws,intcols):創(chuàng)建一個行數(shù)為rows、列數(shù)為cols的網(wǎng)格區(qū)域。?GridLayout(introws,intcols,inthgap,intvgap):創(chuàng)建一個行數(shù)為rows、列數(shù)為cols、水平間距為hgap、垂直間距為vgap的網(wǎng)格區(qū)域。04事件處理9.4事件處理GUI中的事件處理機制是建立交互式應用程序的關鍵技術,而事件是用戶在程序界面上的各種操作,例如鼠標的單雙擊、鍵盤輸入、關閉窗體等等。Java中定義了很多事件類,用于描述多種的用戶行為,比如代表鼠標事件的MouseEvent類、代表鍵盤事件的KeyEvent等等。事件處理的原理很好理解。每當用戶在組件上進行某種操作時,事件處理系統(tǒng)便會生成一個事件類對象。例如,用戶使用鍵盤輸入時,事件處理系統(tǒng)會生成一個代表此事件的KeyEvent事件類對象。而用戶的操作不同,事件類對象也會不同。這時,與鍵盤輸入這個事件相對應的監(jiān)聽程序接口KeyListener就會捕獲到這個事件類對象并按設定的方法執(zhí)行事件動作。為了接受某類用戶事件發(fā)生并執(zhí)行下一步動作,組件必須先注冊相應的事件處理程序。這種事件處理程序被稱為事件的監(jiān)聽程序,用Listener表示。9.4事件處理用Java的GUI事件處理機制原理設計一個Email接收的工作,要求在點擊Open的按鈕后顯示Email的內容。例題9.5Email接收9.4事件處理9.4事件處理前面章節(jié)已經(jīng)以KeyEvent為例子介紹了圖形用戶界面設計中事件處理機制的原理,實際上,在java.awt.event包和javax.swing.event包中還定義了很多其他事件類,例如ItemEvent、ActionEvent、MouseEvent等,并且還有一些第三方的內容加入其中。Java中的每種事件類都有對應的接口,這些接口中還聲明了一個或多個抽象事件處理方法。下表9-1中列出一些常用的事件類型、與之對應的接口以及接口中所聲明的方法。9.4事件處理多監(jiān)聽程序是一種在Java事件處理中的設計模式,允許一個事件,如按鈕或文本框,同時接收多個監(jiān)聽器來處理相同類型的事件。這種模式有助于提高程序與事件處理的靈活性和可維護性,因為它允許開發(fā)者向同一事件源添加或移除多個監(jiān)聽器,每個監(jiān)聽器負責處理特定的事件。在前面的幾章節(jié)中介紹了事件的各個種類,在隨后的學習中,一個繁瑣的問題必然存在。為了進行事件處理,程序需要創(chuàng)建實現(xiàn)Listener接口的類,而在某些Listener接口中,聲明了很多抽象方法,為了實現(xiàn)這些接口需要一一實現(xiàn)這些方法。比如在使用MouseListener接口的類時,必須同時實現(xiàn)到mouseClicked(MouseEvent)、mousePressed(MouseEvent)、mouseReleased(MouseEvent)、mouseEntered(MouseEvent)、mouseExited(MouseEvent)這五種方法。然而,在實際情況中,只需要聲明接口中的某個方法。這時,事件適配器就可以做到。為了編程方便,Java為一些聲明了多個方法的Listener接口提供了相對應適配器類Adapter,程序在適配器類中實現(xiàn)了相應接口中的全部方法,只是這些方法的內容為空。05本章小結本章小結Java圖形用戶界面設計依托組件和容器的使用,AWT和Swing是Java圖形用戶界面設計的兩個組件包。容器是一種特殊的組件,具有包含和組織組件的作用容器可以與其他容器嵌套使用組合,而最外層的容器必須是頂層容器。內容窗格是用于容納應用程序主要內容的特殊區(qū)域。面板是一種特殊的容器組件,類似書桌為其他組件的位置與結構式組合。布局管理器負責每個組件容器的位置的擺放與大小的數(shù)值。事件處理機制原理為每當用戶在組件上進行某種操作時,事件處理系統(tǒng)便會生成一個事件類對象,與這個事件類對象相對應的監(jiān)聽程序就會接收到信號并執(zhí)行規(guī)定的行為動作。Swing組件Swingcomponent第十章目錄0102030405窗口按鈕標簽組合框列表0106文本組件07菜單組件08對話框0109定制組件樣式01窗口10.1窗口JFrame是JavaSwing庫中的“骨架”,支撐著整個GUI應用程序。它扮演著窗口的角色,給予用戶一個可視化的舞臺,讓應用程序與用戶進行“對話”。在這舞臺之上,可以添加各種Swing組件,如按鈕、文本框、列表等,讓應用程序變得更加豐富多彩。JFrame的主要功能包括:1.創(chuàng)建和管理窗口:JFrame可以用來創(chuàng)建一個新的窗口,并控制其大小、位置和關閉行為。2.添加組件:可以在JFrame中添加各種Swing組件,如按鈕、文本框、列表等,以實現(xiàn)用戶交互。3.處理事件:JFrame可以處理各種事件,如窗口事件、鍵盤事件、鼠標事件等,以響應用戶的操作。4.布局管理:JFrame可以使用布局管理器來管理組件的位置和大小,使得組件可以自動適應窗口的大小變化。10.1窗口以下是JFrame的運用步驟:1.創(chuàng)建JFrame對象:要創(chuàng)建一個新的JFrame窗口,需要使用JFrame類的構造方法,例如:
JFrameframe=newJFrame("WindowTitle");2.設置窗口屬性:可以使用JFrame類提供的方法來設置窗口的各種屬性,例如:setDefaultCloseOperation(intoperation):設置窗口關閉按鈕的行為,可以選擇EXIT_ON_CLOSE(退出程序)、DO_NOTHING_ON_CLOSE(不執(zhí)行任何操作)、HIDE_ON_CLOSE(隱藏窗口并停止程序運行)等。setSize(intwidth,intheight):設置窗口的大小。setVisible(booleanvisible):設置窗口是否可見。3.添加組件:可以在JFrame窗口中添加各種Swing組件,例如按鈕、文本框、標簽等??梢允褂胊dd()方法將組件添加到窗口中,例如:JButtonbutton=newJButton("Clickme");frame.add(button);10.1窗口4.設置布局管理器:布局管理器用于控制組件在窗口中的布局方式??梢允褂胹etLayout()方法設置布局管理器,例如:
frame.setLayout(newFlowLayout());5.處理事件:可以為JFrame窗口添加事件監(jiān)聽器,以便在用戶與窗口交互時執(zhí)行相應的操作。例如,可以為窗口添加WindowListener,以便在窗口關閉時執(zhí)行特定的操作。6.啟動事件調度線程(EventDispatchThread,EDT):在創(chuàng)建完JFrame窗口后,需要啟動事件調度線程來處理用戶事件??梢允褂肧wingUtilities.invokeLater()方法啟動事件調度線程,例如:SwingUtilities.invokeLater(newRunnable(){publicvoidrun(){createAndShowGUI();}});其中,createAndShowGUI()方法中包含了創(chuàng)建和顯示JFrame窗口的代碼。10.1窗口以下是使用JFrame創(chuàng)建一個簡單窗口的Java代碼:importjavax.swing.JFrame;publicclassSimpleWindow{publicstaticvoidmain(String[]args){JFrameframe=newJFrame("SimpleWindow");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(300,200);frame.setVisible(true);}}importjavax.swing.JFrame:這行代碼導入了JavaSwing庫中的JFrame類。JFrame是用于創(chuàng)建窗口的類。JFrameframe=newJFrame("SimpleWindow"):創(chuàng)建了一個新的JFrame對象,并命名為“SimpleWindow”。這個對象表示一個窗口,標題為“SimpleWindow”。frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE):設置窗口的默認關閉操作為退出程序。當用戶點擊窗口的關閉按鈕時,程序會結束運行。frame.setSize(300,200):設置窗口的大小為300像素寬和200像素高。frame.setVisible(true):設置窗口為可見狀態(tài)。如果這行代碼被注釋掉或不存在,窗口將不會被顯示。10.1窗口
這段代碼創(chuàng)建了一個名為“SimpleWindow”的窗口,設置了默認關閉操作為退出程序,窗口大小為300x200像素,并使窗口可見。效果如圖10-1所示:圖10-1“SimpleWindow”的窗口
單個窗口未免有些單調,JavaSwing庫還提供了許多其他組件,用于構建豐富多彩的用戶界面。02按鈕10.2.1普通按鈕JButton是Swing組件中的多功能按鈕,它融合了文本、圖像和事件處理于一身。它既可展現(xiàn)優(yōu)雅的外觀,又可響應各種用戶操作,是布局管理中的得力助手。JButton的一些主要特點:文本和圖像的組合:JButton可以包含文本和圖像,通過構造函數(shù)的不同參數(shù),可以創(chuàng)建不同形式的按鈕。事件處理:JButton支持多種事件,如點擊事件、鍵盤事件等??梢酝ㄟ^添加事件監(jiān)聽器來處理這些事件,并在事件發(fā)生時執(zhí)行相應的代碼。自定義外觀:可以通過設置屬性來改變JButton的外觀,例如顏色、字體和邊框樣式等。布局管理:JButton可以作為其他容器組件的子組件,并使用布局管理器來管理其位置和大小。我們常常能在各種各樣的窗口中看到各種按鈕,那么如何創(chuàng)造一個屬于自己的按鈕呢?10.2按鈕10.2.1普通按鈕JButton的一些常用構造函數(shù):JButton():創(chuàng)建一個空的按鈕。JButton(Stringtext):創(chuàng)建一個包含指定文本的按鈕。JButton(Iconicon):創(chuàng)建一個包含指定圖標的按鈕。JButton(Stringtext,Iconicon):創(chuàng)建一個包含文本和圖標的按鈕。
除了構造函數(shù)之外,JButton類還提供了一些常用方法來設置按鈕的屬性和處理事件,例如addActionListener()、setActionCommand()、getIcon()等。10.2按鈕10.2.1普通按鈕以下是一個簡單的JButton應用例子:importjavax.swing.*;publicclassSimpleJButton{publicstaticvoidmain(String[]args){//創(chuàng)建一個新的JFrame窗口
JFrameframe=newJFrame("SimpleJButton");//設置窗口的默認關閉操作為退出程序
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//創(chuàng)建一個新的JButton按鈕
JButtonbutton=newJButton("Clickme");//將按鈕添加到窗口中
frame.getContentPane().add(button);//設置窗口的大小并使其可見
frame.setSize(300,200);frame.setVisible(true);}}10.2按鈕10.2.1普通按鈕JButtonbutton=newJButton("Clickme"):創(chuàng)建一個新的JButton按鈕,并設置其文本為"Clickme"。frame.getContentPane().add(button):將按鈕添加到窗口的內容窗格中。frame.setSize(300,200):設置窗口的大小為300像素寬和200像素高。效果如圖10-2所示:10.2按鈕圖10-2“JButton”10.2.2切換按鈕JToggleButton在Swing組件中,就如同一個紅綠燈。當用戶點擊它時,它就變成綠燈,使車輛開始通行,進入選中狀態(tài);再次點擊,它就變成紅燈,禁止車輛通行,取消選中狀態(tài)。通過它的“開關”功能,JToggleButton在用戶界面中扮演著重要的角色,方便用戶進行選擇和切換操作。10.2按鈕10.2.2切換按鈕以下是一個簡單的JToggleButton應用例子:importjavax.swing.*;publicclassSimpleJToggleButton{publicstaticvoidmain(String[]args){//創(chuàng)建一個新的JFrame窗口
JFrameframe=newJFrame("SimpleJToggleButton");//設置窗口的默認關閉操作為退出程序
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//創(chuàng)建一個新的JToggleButton按鈕
JToggleButtontoggleButton=newJToggleButton("Clickme");//將按鈕添加到窗口中
frame.getContentPane().add(toggleButton);//設置窗口的大小并使其可見
frame.setSize(300,200);frame.setVisible(true);}}JToggleButtontoggleButton=newJToggleButton("Clickme"):創(chuàng)建一個新的JToggleButton按鈕,并設置其文本為"Clickme"。frame.getContentPane().add(toggleButton):將按鈕添加到窗口的內容窗格中。10.2按鈕10.2.3單選按鈕
在現(xiàn)實生活中,選擇題通常有一個選項,每個選項都有一個單選按鈕與之關聯(lián)。用戶只能選擇一個選項,即只能選中一個單選按鈕。這就好比在JavaGUI程序中,,用戶只能選擇一個JRadioButton。
當用戶選擇某個JRadioButton時,這個按鈕就會變亮,表示它被選中。如果用戶選擇了另一個JRadioButton,則原先選中的按鈕會變暗,而新的按鈕會變亮。這就好比在選擇題中,用戶選擇了一個選項后,該選項的單選按鈕就會變亮,而其他選項的單選按鈕會變暗。10.2按鈕10.2.3單選按鈕JRadioButton的運用方法包括以下步驟:1.創(chuàng)建JRadioButton對象:使用JRadioButton構造函數(shù)創(chuàng)建一個新的單選按鈕。可以指定按鈕的文本作為參數(shù),例如:JRadioButtonradioButton=newJRadioButton("Option");2.添加到ButtonGroup:將JRadioButton添加到一個ButtonGroup中,以確保同一組中的單選按鈕只能選擇一個。這可以通過調用ButtonGroup的add方法實現(xiàn),例如:ButtonGroupgroup=newButtonGroup();group.add(radioButton);3.添加到容器中:將JRadioButton添加到GUI容器中,例如JPanel或JFrame,以便在屏幕上顯示它。這可以通過調用容器的add方法實現(xiàn),例如:panel.add(radioButton);4.添加事件監(jiān)聽器:為JRadioButton添加事件監(jiān)聽器,以便在用戶單擊按鈕時執(zhí)行特定操作。可以使用addActionListener方法添加監(jiān)聽器,并實現(xiàn)ActionListener接口來定義事件處理程序。例如:radioButton.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){//執(zhí)行特定操作}});5.顯示GUI組件:最后,需要顯示GUI容器和其中的組件。這可以通過調用容器的setVisible方法實現(xiàn),例如:frame.setVisible(true);10.2按鈕10.2.3單選按鈕以下是一個簡單的JRadioButton應用例子:importjavax.swing.*;importjava.awt.*;publicclassJRadioButtonExample{publicstaticvoidmain(String[]args){//創(chuàng)建JFrame實例JFrameframe=newJFrame("JRadioButton示例");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(300,200);//創(chuàng)建面板JPanelpanel=newJPanel();panel.setLayout(newFlowLayout());//創(chuàng)建單選按鈕組ButtonGroupbuttonGroup=newButtonGroup();//創(chuàng)建單選按鈕JRadioButtonradioButton1=newJRadioButton("選項1");JRadioButtonradioButton2=newJRadioButton("選項2");10.2按鈕//添加到單選按鈕組buttonGroup.add(radioButton1);buttonGroup.add(radioButton2);//添加到面板panel.add(radioButton1);panel.add(radioButton2);//將面板添加到JFrame中frame.add(panel);frame.setVisible(true);}}10.2.3單選按鈕ButtonGroupbuttonGroup=newButtonGroup():創(chuàng)建一個新的ButtonGroup實例,它是一個單選按鈕組,這意味著用戶只能選擇一個按鈕。JRadioButtonradioButton1=newJRadioButton("選項1"):創(chuàng)建一個新的JRadioButton(單選按鈕)實例,并設置其標簽為“選項1”。buttonGroup.add(radioButton1):將第一個單選按鈕添加到單選按鈕組中。panel.add(radioButton1):將第一個單選按鈕添加到面板中。10.2按鈕10.2.3單選按鈕例10.1超市提供了男士專用的洗發(fā)水和女士專用的洗發(fā)水,請使用Swing組件中JRadioButton創(chuàng)造一個選擇界面幫助客戶們選擇。10.2按鈕10.2.3單選按鈕使用ChatGPT編寫的代碼如下:importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;publicclassShampooSelector{privateJFrameframe;privateJRadioButtonmenShampooButton,womenShampooButton;privateJLabelresultLabel;publicShampooSelector(){frame=newJFrame("洗發(fā)水選擇器");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(300,200);//創(chuàng)建面板來放置組件
JPanelpanel=newJPanel();frame.add(panel);//創(chuàng)建和添加男性專用洗發(fā)水的單選按鈕
menShampooButton=newJRadioButton("男士專用洗發(fā)水");panel.add(menShampooButton);//創(chuàng)建和添加女性專用洗發(fā)水的單選按鈕
womenShampooButton=newJRadioButton("女士專用洗發(fā)水");panel.add(womenShampooButton);10.2按鈕10.2.3單選按鈕//創(chuàng)建一個標簽來顯示結果
resultLabel=newJLabel("請選擇洗發(fā)水");panel.add(resultLabel);//創(chuàng)建一個按鈕來處理選擇事件
JButtonselectButton=newJButton("選擇");panel.add(selectButton);//添加監(jiān)聽器來處理選擇事件
selectButton.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){//檢查哪個單選按鈕被選中
if(menShampooButton.isSelected()){resultLabel.setText("您選擇了男士專用洗發(fā)水");}elseif(womenShampooButton.isSelected()){resultLabel.setText("您選擇了女士專用洗發(fā)水");}else{resultLabel.setText("請選擇一個選項");}}});frame.setVisible(true);}10.2按鈕publicstaticvoidmain(String[]args){SwingUtilities.invokeLater(newRunnable(){@Overridepublicvoidrun(){newShampooSelector();//創(chuàng)建并顯示窗口和組件
}});}}10.2.4復選按鈕10.2按鈕JCheckBox用于創(chuàng)建一個復選框。用戶可以通過選中或取消選中復選框來選擇或取消選擇某個選項。
在Java中,可以使用JCheckBox類創(chuàng)建復選框對象,并通過構造函數(shù)設置文本、圖標等屬性。還可以使用JCheckBox的常用方法來獲取和設置其狀態(tài)以及標簽。當JCheckBox被選中或清除時,將發(fā)生一個事件,可以使用ActionListener來捕獲這個事件。10.2.4復選按鈕10.2按鈕以下是使用JCheckBox的基本步驟:1.導入必要的包:importjavax.swing.*;2.創(chuàng)建JCheckBox對象:JCheckBoxcheckBox=newJCheckBox("復選框文本");3.將JCheckBox添加到容器中:panel.add(checkBox);4.可以為JCheckBox添加ActionListener來監(jiān)聽其事件:checkBox.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){if(checkBox.isSelected()){//選中事件處理代碼
}else{//未選中事件處理代碼
}}});5.顯示組件:如果使用JFrame作為容器,可以使用以下代碼顯示組件:frame.setVisible(true);10.2.4復選按鈕10.2按鈕這里有一個簡單的JCheckBox應用例子:importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;publicclassJCheckBoxExample{privateJFrameframe;privateJCheckBoxcheckBox;privateJLabellabel;publicstaticvoidmain(String[]args){EventQueue.invokeLater(()->{try{JCheckBoxExamplewindow=newJCheckBoxExample();window.frame.setVisible(true);}catch(Exceptione){e.printStackTrace();}});}publicJCheckBoxExample(){initialize();}privatevoidinitialize(){frame=newJFrame();frame.setBounds(100,100,250,150);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().setLayout(null);checkBox=newJCheckBox("Checkme");checkBox.setBounds(50,50,100,25);frame.getContentPane().add(checkBox);label=newJLabel("");label.setBounds(50,100,100,25);frame.getContentPane().add(label);checkBox.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){if(checkBox.isSelected()){label.setText("Checked");}else{label.setText("Unchecked");}}});}}10.2.4復選按鈕10.2按鈕這里有一個簡單的JCheckBox應用例子:importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;publicclassJCheckBoxExample{privateJFrameframe;privateJCheckBoxcheckBox;privateJLabellabel;publicstaticvoidmain(String[]args){EventQueue.invokeLater(()->{try{JCheckBoxExamplewindow=newJCheckBoxExample();window.frame.setVisible(true);}catch(Exceptione){e.printStackTrace();}});}publicJCheckBoxExample(){initialize();}privatevoidinitialize(){frame=newJFrame();frame.setBounds(100,100,250,150);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().setLayout(null);checkBox=newJCheckBox("Checkme");checkBox.setBounds(50,50,100,25);frame.getContentPane().add(checkBox);label=newJLabel("");label.setBounds(50,100,100,25);frame.getContentPane().add(label);checkBox.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){if(checkBox.isSelected()){label.setText("Checked");}else{label.setText("Unchecked");}}});}}10.2.4復選按鈕10.2按鈕checkBox=newJCheckBox("Checkme"):創(chuàng)建一個新的復選框,標簽為“Checkme”。checkBox.setBounds(50,50,100,25):設置復選框的位置和大小。checkBox.addActionListener(newActionListener():為復選框添加一個動作監(jiān)聽器,以便響應用戶的操作。
10.2.4復選按鈕10.2按鈕例10.2使用JCheckBox組件來允許用戶選擇他們喜歡的水果(蘋果、香蕉或橙子)。10.2.4復選按鈕10.2按鈕引導ChatGPT編寫的代碼如下所示:importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;publicclassFruitSelectionApp{privateJFrameframe;privateJCheckBoxappleCheckBox,bananaCheckBox,orangeCheckBox;privateJLabelresultLabel;publicFruitSelectionApp(){frame=newJFrame("水果選擇器");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(300,200);JPanelpanel=newJPanel();panel.setLayout(newFlowLayout());//創(chuàng)建復選框和標簽
appleCheckBox=newJCheckBox("蘋果");bananaCheckBox=newJCheckBox("香蕉");orangeCheckBox=newJCheckBox("橙子");resultLabel=newJLabel("請選擇你喜歡的水果");
//將復選框和標簽添加到面板中
panel.add(appleCheckBox);panel.add(bananaCheckBox);panel.add(orangeCheckBox);panel.add(resultLabel);frame.add(panel);frame.setVisible(true);//添加監(jiān)聽器來處理選擇事件
appleCheckBox.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){if(appleCheckBox.isSelected()){resultLabel.setText("你選擇了蘋果");}else{resultLabel.setText("請選擇你喜歡的水果");}}});
10.2.4復選按鈕10.2按鈕bananaCheckBox.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){if(bananaCheckBox.isSelected()){resultLabel.setText("你選擇了香蕉");}else{resultLabel.setText("請選擇你喜歡的水果");}}});orangeCheckBox.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){if(orangeCheckBox.isSelected()){resultLabel.setText("你選擇了橙子");}else{resultLabel.setText("請選擇你喜歡的水果");}}});}publicstaticvoidmain(String[]args){SwingUtilities.invokeLater(newRunnable(){@Overridepublicvoidrun(){newFruitSelectionApp();}});}}03標簽10.3標簽Swing中的JLabel,宛如一塊醒目的信息招牌,時刻傳遞著關鍵信息。在GUI的世界里,JLabel就如同那個不可或缺的信息傳遞者,用最直接的方式向用戶傳遞著必要的信息。開發(fā)者可以通過setText()和setIcon()方法,為其賦予個性化的文本和圖標,使其更加生動有趣。有了JLabel的陪伴,其他Swing組件仿佛擁有了鮮活的靈魂,一同演繹出絢麗多彩的GUI世界。10.3標簽以下是一個簡單的JLabel應用例子:importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassSimpleSwingApp{publicstaticvoidmain(String[]args){//創(chuàng)建一個新的JFrame實例
JFrameframe=newJFrame("SimpleSwingApp");//設置窗口的默認關閉操作(關閉窗口時退出程序)
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//設置窗口的大小
frame.setSize(300,200);//創(chuàng)建一個標簽組件
JLabellabel=newJLabel("Hello,Swing!");//創(chuàng)建一個按鈕組件,并添加一個點擊事件監(jiān)聽器
JButtonbutton=newJButton("ClickMe");button.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){label.setText("Buttonclicked!");}});//將標簽和按鈕添加到內容面板中
frame.getContentPane().add(label,BorderLayout.NORTH);frame.getContentPane().add(button,BorderLayout.SOUTH);
//使窗口可見
frame.setVisible(true);}}JLabellabel=newJLabel("Hello,Swing!"):創(chuàng)建一個標簽組件,顯示文本"Hello,Swing!"。frame.getContentPane().add(label,BorderLayout.NORTH):將標簽添加到窗口的內容窗格的上方位置。04組合框10.4組合框JComboBox在Swing中,就如同一位細致入微的服務生。它為用戶提供了一系列的選項,如同菜單上的各種菜品,供用戶挑選。用戶可以根據(jù)自己的喜好選擇一個或多個選項,而JComboBox則準確地記錄下用戶的每一個選擇。同時,它還能監(jiān)聽選項的變化,及時傳遞給開發(fā)者相關的信息。
10.4組合框以下是一個簡單的運用JComboBox的例子:importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassComboBoxExample{privateJFrameframe;privateJLabellabel;privateJComboBox<String>comboBox;publicstaticvoidmain(String[]args){EventQueue.invokeLater(()->{try{ComboBoxExamplewindow=newComboBoxExample();window.frame.setVisible(true);}catch(Exceptione){e.printStackTrace();}});}publicComboBoxExample(){initialize();}privatevoidinitialize(){frame=newJFrame();frame.setBounds(100,100,250,150);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().setLayout(null);label=newJLabel("Selectanoption:");label.setBounds(10,20,80,25);frame.getContentPane().add(label);comboBox=newJComboBox<>(newString[]{"Option1","Option2","Option3"});comboBox.setBounds(100,20,120,25);frame.getContentPane().add(comboBox);comboBox.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvente){StringselectedItem=(String)comboBox.getSelectedItem();System.out.println("Selected:"+selectedItem);}});}}10.4組合框EventQueue.invokeLater():使用EventQueue的invokeLater()方法來確保GUI組件在事件調度線程中被創(chuàng)建和更新。try:開始一個try塊來捕獲可能發(fā)生的異常。ComboBoxExamplewindow=newComboBoxExample():創(chuàng)建一個新的ComboBoxExample對象。window.frame.setVisible(true):使窗口可見。catch(Exceptione):捕獲異常。e.printStackTrace():打印異常的堆棧跟蹤。comboBox=newJComboBox<>(newString[]{"Option1","Option2","Option3"}):創(chuàng)建一個下拉組合框,包含三個選項。comboBox.setBounds(100,20,120,25):設置組合框的位置和大小。frame.getContentPane().add(comboBox):將組合框添加到窗口的內容面板中。comboBox.addActionListener(newActionListener():為組合框添加一個動作監(jiān)聽器,以便在選項被選擇時執(zhí)行操作。10.4組合框
例10.3學校想要學生們在數(shù)學、物理、化學、計算機這四科中選擇一門學科安排學習社團,請使用ComboBox創(chuàng)建一個學科選擇界面。10.4組合框引導ChatGPT編寫結果如下:importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;publicclassSubjectSelectionExample{privateJFrameframe;privateJLabellabel;privateJComboBox<String>comboBox;publicSubjectSelectionExample(){frame=newJFrame("學科選擇界面");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(300,200);label=newJLabel("請選擇一個學科:");comboBox=newJComboBox<>(newString[]{"數(shù)學","物理","化學","計算機"});
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度總經(jīng)理職位聘請與保密協(xié)議合同
- 2025版美容機構美容師專業(yè)聘用及培訓合同范本3篇
- 課題申報參考:南宋私家本朝史籍修撰及其家國書寫研究
- 課題申報參考:民國時期六大疫災的時空變遷規(guī)律、環(huán)境機理與社會影響對比研究
- 二零二五年度智慧城市規(guī)劃設計咨詢服務合同2篇
- 二零二五年度內衣品牌授權銷售區(qū)域保護合同規(guī)范
- 2025版模板智慧農(nóng)業(yè)解決方案合同2篇
- 2025年度衛(wèi)星通信設備銷售與維護合同4篇
- 2025年度智能零售店鋪門面租賃與系統(tǒng)支持合同
- 2025年度個人買賣房屋貸款合同規(guī)范2篇
- 采購支出管理制度
- 兒科護理安全警示教育課件
- 三年級下冊口算天天100題
- 國家中英文名稱及代碼縮寫(三位)
- 人員密集場所消防安全培訓
- 液晶高壓芯片去保護方法
- 使用AVF血液透析患者的護理查房
- 拜太歲科儀文檔
- 2021年高考山東卷化學試題(含答案解析)
- 2020新譯林版高中英語選擇性必修一重點短語歸納小結
- GB/T 19668.7-2022信息技術服務監(jiān)理第7部分:監(jiān)理工作量度量要求
評論
0/150
提交評論